 7 谢彬彬 用MicroPython触摸物理世界“用MicroPython” 触摸物理世界? 谢彬彬 Web全栈开发 目录 CONTENTS 邂逅的那个夏天 原来你是这样子的 你尽然可以这样 不行!我要搞定你 好啦!看你还不乖乖的 邂逅的那个夏天 动手打发无聊的日子 相遇-可以编程的硬件 便宜是便宜,但太难了! 8051 8位单片机 Coretex M0 32位MCU 对于初学者比上一个更难 太难了 放弃了! 相遇-开源世界的可编程硬件0 码力 | 33 页 | 1.20 MB | 1 年前3 7 谢彬彬 用MicroPython触摸物理世界“用MicroPython” 触摸物理世界? 谢彬彬 Web全栈开发 目录 CONTENTS 邂逅的那个夏天 原来你是这样子的 你尽然可以这样 不行!我要搞定你 好啦!看你还不乖乖的 邂逅的那个夏天 动手打发无聊的日子 相遇-可以编程的硬件 便宜是便宜,但太难了! 8051 8位单片机 Coretex M0 32位MCU 对于初学者比上一个更难 太难了 放弃了! 相遇-开源世界的可编程硬件0 码力 | 33 页 | 1.20 MB | 1 年前3
 Rust在物理引擎研发中的应用 崔汉青第三届中国Rust开发者大会 Rust在物理引擎研发中的应用 崔汉青 Motphys CEO Motphys 驱动虚拟世界的全部运动 体验 应用 基础应用: 内容生成工具、 交易市场等 基础硬件: 5G/6G、 半导体、 VR/AR等 基础软件: 渲染引擎、 动作物理引擎等 静态表现力 动态表现力 渲染技术 动作物理技术 动作技术 Motion 物理技术 Physics 规则驱动 动作物理分离 跨平台确定性 动作物理统一 算力动态调配 分布式计算 物理材质统一解算 算法优化 物理材质单独解算 工程优化 性能待优化 AI仿真加速 前沿动作功能 缺乏动作功能 AI动作生成 优秀的易用性和适配性 缺乏AI能力 保证每个目标平台的极致性能 跨端确定性 – 保证所有目标平台计算结 果完全一致 具备分布式能力 – 通过横向扩展突破单 机物理算力的上限 机物理算力的上限 Motphys 物理引擎的设计目标 Rust 的性能和 C/C++ 比肩,支持 SIMD 优 化,满足苛求性能的引擎研发需求; Rust 的零开销抽象甩掉了复杂设计的性能包袱 # 高性能 Rust 在不损耗性能的情况下,其优秀的语 法设计保证了语言的强大表达力:用更少 的代码写更多的功能 # 高表达力 # 安全 Rust 依靠 LLVM 实现了多目标平台,并可 以用语言内建的 target_feature0 码力 | 22 页 | 1.18 MB | 1 年前3 Rust在物理引擎研发中的应用 崔汉青第三届中国Rust开发者大会 Rust在物理引擎研发中的应用 崔汉青 Motphys CEO Motphys 驱动虚拟世界的全部运动 体验 应用 基础应用: 内容生成工具、 交易市场等 基础硬件: 5G/6G、 半导体、 VR/AR等 基础软件: 渲染引擎、 动作物理引擎等 静态表现力 动态表现力 渲染技术 动作物理技术 动作技术 Motion 物理技术 Physics 规则驱动 动作物理分离 跨平台确定性 动作物理统一 算力动态调配 分布式计算 物理材质统一解算 算法优化 物理材质单独解算 工程优化 性能待优化 AI仿真加速 前沿动作功能 缺乏动作功能 AI动作生成 优秀的易用性和适配性 缺乏AI能力 保证每个目标平台的极致性能 跨端确定性 – 保证所有目标平台计算结 果完全一致 具备分布式能力 – 通过横向扩展突破单 机物理算力的上限 机物理算力的上限 Motphys 物理引擎的设计目标 Rust 的性能和 C/C++ 比肩,支持 SIMD 优 化,满足苛求性能的引擎研发需求; Rust 的零开销抽象甩掉了复杂设计的性能包袱 # 高性能 Rust 在不损耗性能的情况下,其优秀的语 法设计保证了语言的强大表达力:用更少 的代码写更多的功能 # 高表达力 # 安全 Rust 依靠 LLVM 实现了多目标平台,并可 以用语言内建的 target_feature0 码力 | 22 页 | 1.18 MB | 1 年前3
 统一建模语言 UML 参考手册 - 基本概念的各种视图 同时显示了各种结构如何配合工作 ��� 一 览中 以一个简单的例子开始 对 ��� 的视图 概念作了简单的介绍 然后 在后续的 章节中 静态视图 用例视图 状态机视图 活动视图 交互视图 物理视图 模型管理 视图 扩展机制 对各个视图进行详细的讨论 它们分别从静态建模机制 动态建模机制 模型管理机制以及扩展机制对 ��� 进行探讨 � ��� 标准元素讨论了一些与核心概念的区别较小或者重要性不足以被包括至 �������������������������������������������������������������������������������������������������� 物理视图������������������������������������������������������������������������������������������������� ������������������������������������������������������������������������������������� ��� 物理视图 物理视图 物理视图 物理视图 PHYSICAL VIEW ���������������������������������������������������������������������������0 码力 | 123 页 | 2.61 MB | 1 年前3 统一建模语言 UML 参考手册 - 基本概念的各种视图 同时显示了各种结构如何配合工作 ��� 一 览中 以一个简单的例子开始 对 ��� 的视图 概念作了简单的介绍 然后 在后续的 章节中 静态视图 用例视图 状态机视图 活动视图 交互视图 物理视图 模型管理 视图 扩展机制 对各个视图进行详细的讨论 它们分别从静态建模机制 动态建模机制 模型管理机制以及扩展机制对 ��� 进行探讨 � ��� 标准元素讨论了一些与核心概念的区别较小或者重要性不足以被包括至 �������������������������������������������������������������������������������������������������� 物理视图������������������������������������������������������������������������������������������������� ������������������������������������������������������������������������������������� ��� 物理视图 物理视图 物理视图 物理视图 PHYSICAL VIEW ���������������������������������������������������������������������������0 码力 | 123 页 | 2.61 MB | 1 年前3
 2020美团技术年货 算法篇美团无人车引擎在仿真中的实践 204 美团无人配送 CVPR2020 论文 CenterMask 解读 215 WSDM Cup 2020 检索排序评测任务第一名经验总结 225 美团内部讲座|清华大学莫一林:信息物理系统中的安全控制算法 235 KDD Cup 2020 多模态召回比赛季军方案与搜索业务应用 252 对话任务中的“语言 - 视觉”信息融合研究 267 ICDM 论文:探索跨会话信息感知的推荐模型 技术专家、知识图谱算法专家,欢迎感兴趣的同学发送简历至:tech@ meituan.com(邮件标题注明:NLP 中心 - 北京 / 上海)。 算法 < 235 美团内部讲座|清华大学莫一林:信息物理系统中 的安全控制算法 作者:莫一林 【Top Talk/ 大咖说】由美团技术学院主办,面向全体技术同学,定期邀请美团各技术 团队负责人、业界大咖、高校学者及畅销书作者,为大家分享最佳实践、互联网热门 题为《信息物理系统中的安全控制算法设计》的分享。本文系本次分享内容的文字实 录,希望能对大家有所帮助或者启发。 以下系文字实录: 中文讲的“安全”,其实基本上包含了英文中的两重含义,一个是 Safety,一个是 Security。信息物理系统中的安全问题主要是指 Security,也就是说,如果有人想要 攻击你,在这种情况下,怎么能够保证系统的正常运行? 信息物理系统 “信息物理系统”,这个词大概是0 码力 | 317 页 | 16.57 MB | 1 年前3 2020美团技术年货 算法篇美团无人车引擎在仿真中的实践 204 美团无人配送 CVPR2020 论文 CenterMask 解读 215 WSDM Cup 2020 检索排序评测任务第一名经验总结 225 美团内部讲座|清华大学莫一林:信息物理系统中的安全控制算法 235 KDD Cup 2020 多模态召回比赛季军方案与搜索业务应用 252 对话任务中的“语言 - 视觉”信息融合研究 267 ICDM 论文:探索跨会话信息感知的推荐模型 技术专家、知识图谱算法专家,欢迎感兴趣的同学发送简历至:tech@ meituan.com(邮件标题注明:NLP 中心 - 北京 / 上海)。 算法 < 235 美团内部讲座|清华大学莫一林:信息物理系统中 的安全控制算法 作者:莫一林 【Top Talk/ 大咖说】由美团技术学院主办,面向全体技术同学,定期邀请美团各技术 团队负责人、业界大咖、高校学者及畅销书作者,为大家分享最佳实践、互联网热门 题为《信息物理系统中的安全控制算法设计》的分享。本文系本次分享内容的文字实 录,希望能对大家有所帮助或者启发。 以下系文字实录: 中文讲的“安全”,其实基本上包含了英文中的两重含义,一个是 Safety,一个是 Security。信息物理系统中的安全问题主要是指 Security,也就是说,如果有人想要 攻击你,在这种情况下,怎么能够保证系统的正常运行? 信息物理系统 “信息物理系统”,这个词大概是0 码力 | 317 页 | 16.57 MB | 1 年前3
 RISC-V 手册 v2(一本开源指令集的指南)这是一种高速的、流水化的处理器。它们一有机会就执行指令,而不是在按照程序顺序。这 种处理器的一个关键特性是寄存器重命名,把程序中的寄存器名称映射到大量的内部物理 寄存器。条件执行的问题是不管条件是否成立,都必须给这些指令中的寄存器分配相应的物 理寄存器。但内部物理寄存器的可用性是影响乱序处理器的关键性能资源。 补充说明:B 类型和 J 类型指令 如下所述,分支指令(B 类型)的立即数字段在 S 类型的基础上旋转了 中实现精确例外:保证异常之前的所有指令都完整地执行了,而 后续的指令都没有开始执行(或等同于没有执行)。图 10.3 列出了触发标准例外的原因。 在 M 模式运行期间可能发生的同步例外有五种: ⚫ 访问错误异常 当物理内存的地址不支持访问类型时发生(例如尝试写入 ROM)。 ⚫ 断点异常 在执行 ebreak 指令,或者地址或数据与调试触发器匹配时发生。 ⚫ 环境调用异常 在执行 ecall 指令时发生。 个时钟周期之后。最后一段恢复了 a0 到 a4 和 mscratch,然后用 mret 指令返回。 104 图 10.7:PMP 地址和配置寄存器。地址寄存器右移两位,如果物理地址位宽小于 XLEN-2,则高位为 0。 R、W 和 X 域分别对应读、写和执行权限。A 域设置是否启用此 PMP,L 域锁定了 PMP 和对应的地址 寄存器。 图 10.8:pmpcfg0 码力 | 164 页 | 8.85 MB | 1 年前3 RISC-V 手册 v2(一本开源指令集的指南)这是一种高速的、流水化的处理器。它们一有机会就执行指令,而不是在按照程序顺序。这 种处理器的一个关键特性是寄存器重命名,把程序中的寄存器名称映射到大量的内部物理 寄存器。条件执行的问题是不管条件是否成立,都必须给这些指令中的寄存器分配相应的物 理寄存器。但内部物理寄存器的可用性是影响乱序处理器的关键性能资源。 补充说明:B 类型和 J 类型指令 如下所述,分支指令(B 类型)的立即数字段在 S 类型的基础上旋转了 中实现精确例外:保证异常之前的所有指令都完整地执行了,而 后续的指令都没有开始执行(或等同于没有执行)。图 10.3 列出了触发标准例外的原因。 在 M 模式运行期间可能发生的同步例外有五种: ⚫ 访问错误异常 当物理内存的地址不支持访问类型时发生(例如尝试写入 ROM)。 ⚫ 断点异常 在执行 ebreak 指令,或者地址或数据与调试触发器匹配时发生。 ⚫ 环境调用异常 在执行 ecall 指令时发生。 个时钟周期之后。最后一段恢复了 a0 到 a4 和 mscratch,然后用 mret 指令返回。 104 图 10.7:PMP 地址和配置寄存器。地址寄存器右移两位,如果物理地址位宽小于 XLEN-2,则高位为 0。 R、W 和 X 域分别对应读、写和执行权限。A 域设置是否启用此 PMP,L 域锁定了 PMP 和对应的地址 寄存器。 图 10.8:pmpcfg0 码力 | 164 页 | 8.85 MB | 1 年前3
 Java 应用与开发 - MVC 和框架初步extends="struts-default"> 9 Java 应用与开发 - MVC 和框架初步extends="struts-default"> 9- 10 11 15 16 配置一个名称为 login 的 Action,该 Action 配置三个 result 元 素,用于指定逻辑视图与物理资源之间的映射。例如,当返回 input 逻辑视图名称时,系统跳转到/login.jsp 页面。 大纲 Java Web 应用的开发演化 经典 MVC 框架 - Struts 2 本节习题 Struts 经典 MVC 框架 - Struts 2 本节习题 Struts 2 的开发步骤小结  配置处理结果和物理视图资源之间的对应关系 ▶ 当 Action 处理用户请求结束后,通常会返回一个处理结果 (通常使用简单的字符串),我们可以认为该名称是逻辑视图 名。 ▶ 逻辑视图名需要和指定的物理视图资源关联才有价值,所以 我们需要配置处理结果之间的对应关系。 1- /login.jsp 12- /error.jsp 140 码力 | 51 页 | 837.26 KB | 1 年前3 RISC-V 开放架构设计之道 1.0.0. 116 10.26硬件性能监视器 CSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 10.27将虚拟地址翻译到物理地址的完整算法。 . . . . . . . . . . . . . . . . 117 B.1 RV32I 的访存指令翻译成 ARM-32 和 x86-32。 . . . . . . . . . 这是一类高速的流水线处理器,它能投机执行指令,而不是严格依据程序的指令顺序 执行。这类处理器的一项关键技术是寄存器重命名,可将程序中的寄存器名映射到大 量的内部物理寄存器。条件执行带来的问题是,无论条件是否成立,都要写入新分配 的物理寄存器。因此条件不成立时,也必须将目的寄存器的旧值作为该指令的第三个 操作数读出,以写入新的目的寄存器。此额外操作数提升了寄存器堆、寄存器重命名 单元和乱序执行硬件的成本。 的异常是精确的:在异常点之前的所有指令都执行完毕,而异常点之后 架构和实现分离 的指令则都未开始执行。图 10.3 列出标准的异常原因。 在 M 模式运行期间可能发生的同步异常有五种: • 访问故障异常 在物理内存地址不支持访问类型时发生,如尝试写入 ROM。 • 断点异常 在执行 ebreak 指令,或者地址或数据与调试触发器(debug trigger) 匹配时发生。 • 环境调用异常 在执行 ecall0 码力 | 223 页 | 15.31 MB | 1 年前3 RISC-V 开放架构设计之道 1.0.0. 116 10.26硬件性能监视器 CSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 10.27将虚拟地址翻译到物理地址的完整算法。 . . . . . . . . . . . . . . . . 117 B.1 RV32I 的访存指令翻译成 ARM-32 和 x86-32。 . . . . . . . . . 这是一类高速的流水线处理器,它能投机执行指令,而不是严格依据程序的指令顺序 执行。这类处理器的一项关键技术是寄存器重命名,可将程序中的寄存器名映射到大 量的内部物理寄存器。条件执行带来的问题是,无论条件是否成立,都要写入新分配 的物理寄存器。因此条件不成立时,也必须将目的寄存器的旧值作为该指令的第三个 操作数读出,以写入新的目的寄存器。此额外操作数提升了寄存器堆、寄存器重命名 单元和乱序执行硬件的成本。 的异常是精确的:在异常点之前的所有指令都执行完毕,而异常点之后 架构和实现分离 的指令则都未开始执行。图 10.3 列出标准的异常原因。 在 M 模式运行期间可能发生的同步异常有五种: • 访问故障异常 在物理内存地址不支持访问类型时发生,如尝试写入 ROM。 • 断点异常 在执行 ebreak 指令,或者地址或数据与调试触发器(debug trigger) 匹配时发生。 • 环境调用异常 在执行 ecall0 码力 | 223 页 | 15.31 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 07 深入浅出访存优化指的是分支预测是否成功。 多少计算量才算多? • 看右边的 func ,够复杂了吧?也只是勉勉强强超过一 点内存的延迟了,但在 6 个物理核心上并行加速后, 还是变成 mem-bound 了。 • 加速比: 1.36 倍 • 应该达到 6 倍(物理核心数量)才算理想加速比。 加速曲线 • funcA 用了 2 核就饱和。 • funcB 用了 4 核才饱和。 • funcC 用了 电脑的缓存结构分为三级。 • 一级缓存分为数据缓存和指令缓存,其中数据缓存有 32 KB , 6 个物理核心每个都有一个,总共 192 KB 。而指令缓存的大小刚好和数据缓存一样也是 192 KB 。 • 二级缓存有 256 KB , 6 个物理核心每个都有一个, 总共 1.5 MB 。 • 三级缓存由各个物理核心共享,总共 12 MB 。 通过图形界面查看拓扑结构: lstopo 根据我们缓存的大小分析刚刚的图表 每个元素只需要访问两遍内存。对这种完全 mem-bound 的程 序而言就是加速了 2 倍。 测试结果 可见,能否很好的利用缓存,和程序访问内存的时间局域性有关。 案例:一维 jacobi 迭代 • 一些物理仿真中,常用到这种形式的迭代法: • for (i=0...n) b[i] = a[i + 1] + a[i - 1]; // 假装是 jacobi • swap(a, b); // 交换双缓冲0 码力 | 147 页 | 18.88 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 07 深入浅出访存优化指的是分支预测是否成功。 多少计算量才算多? • 看右边的 func ,够复杂了吧?也只是勉勉强强超过一 点内存的延迟了,但在 6 个物理核心上并行加速后, 还是变成 mem-bound 了。 • 加速比: 1.36 倍 • 应该达到 6 倍(物理核心数量)才算理想加速比。 加速曲线 • funcA 用了 2 核就饱和。 • funcB 用了 4 核才饱和。 • funcC 用了 电脑的缓存结构分为三级。 • 一级缓存分为数据缓存和指令缓存,其中数据缓存有 32 KB , 6 个物理核心每个都有一个,总共 192 KB 。而指令缓存的大小刚好和数据缓存一样也是 192 KB 。 • 二级缓存有 256 KB , 6 个物理核心每个都有一个, 总共 1.5 MB 。 • 三级缓存由各个物理核心共享,总共 12 MB 。 通过图形界面查看拓扑结构: lstopo 根据我们缓存的大小分析刚刚的图表 每个元素只需要访问两遍内存。对这种完全 mem-bound 的程 序而言就是加速了 2 倍。 测试结果 可见,能否很好的利用缓存,和程序访问内存的时间局域性有关。 案例:一维 jacobi 迭代 • 一些物理仿真中,常用到这种形式的迭代法: • for (i=0...n) b[i] = a[i + 1] + a[i - 1]; // 假装是 jacobi • swap(a, b); // 交换双缓冲0 码力 | 147 页 | 18.88 MB | 1 年前3 简明 X86 汇编语言教程 GDT)或本地描述符表(Local Descriptor Table, LDT)的一个指针。 如图所示,GDT 和 LDT 的每一个项目都描述一块内存。例如,一个项目中包含了某块被描述 的内存的物理的基地址、长度,以及其他一些相关信息。 保护模式是一个非常重要的概念,同时也是目前撰写应用程序时,最常用的 CPU 模式(运行 在新的计算机上的操作系统很少有在实模式下运行的)。 为什 地址转换 2EA8:D678 -> 物理的 3C0F8 694E:175A -> 物理的 6AC4A 26CF:8D5F -> 物理的 2FA5F 2B3C:D218 -> 物理的 385E8 453A:CFAD -> 物理的 5235D 728F:6578 -> 物理的 78E68 2933:31A6 -> 物理的 2C4D6 68E1:A7DC -> 物理的 735FC 编程 shl 在为选择器装入数值的时候一定要非常小心。错误的数值往往会导致无效页面错误(在 Windows 中经常出现:)。同时,也不要忘记你的地址是 32 位的,这也是保护模式的主要优 势之一。 现在假设存在一个描述符描述从物理的 0:0 开始的全部内存,并已经加载进 DS(数据选择 器),则我们可以通过下面的程序来操作 VGA 的 VRAM: mov edi,0a0000h mov byte ptr [edi],0fh0 码力 | 63 页 | 598.28 KB | 1 年前3 简明 X86 汇编语言教程 GDT)或本地描述符表(Local Descriptor Table, LDT)的一个指针。 如图所示,GDT 和 LDT 的每一个项目都描述一块内存。例如,一个项目中包含了某块被描述 的内存的物理的基地址、长度,以及其他一些相关信息。 保护模式是一个非常重要的概念,同时也是目前撰写应用程序时,最常用的 CPU 模式(运行 在新的计算机上的操作系统很少有在实模式下运行的)。 为什 地址转换 2EA8:D678 -> 物理的 3C0F8 694E:175A -> 物理的 6AC4A 26CF:8D5F -> 物理的 2FA5F 2B3C:D218 -> 物理的 385E8 453A:CFAD -> 物理的 5235D 728F:6578 -> 物理的 78E68 2933:31A6 -> 物理的 2C4D6 68E1:A7DC -> 物理的 735FC 编程 shl 在为选择器装入数值的时候一定要非常小心。错误的数值往往会导致无效页面错误(在 Windows 中经常出现:)。同时,也不要忘记你的地址是 32 位的,这也是保护模式的主要优 势之一。 现在假设存在一个描述符描述从物理的 0:0 开始的全部内存,并已经加载进 DS(数据选择 器),则我们可以通过下面的程序来操作 VGA 的 VRAM: mov edi,0a0000h mov byte ptr [edi],0fh0 码力 | 63 页 | 598.28 KB | 1 年前3 全球架构师峰会2019北京/量子计算/量子计算及其潜在应用&mdash量子计算及其潜在应用 吕定顺 华为中央研究院高级研究员 吕定顺 量子算法和软件研究 • 吕定顺博士,目前就职于华为2012实验室中 央研究院,毕业于清华大学交叉信息研究院 量子物理学专业,至今在量子计算、量子模 拟领域等已经有7年研究经验。博士期间,曾 在 Nature Physics,PRX,Nature Communication,PRL,PRA 等国际知名期刊 发表论文7篇,H index为7,论文累计引用 Only calculate one sequence at one time Calculate the 2N sequences simultaneously 经典计算机的量子物理极限:《摩尔定律》的失效 算力代表着未来 《摩尔定律》失效 表明未来算力依赖 于量子领域的探索 摩尔定律: 集成电路上的晶体管数目 每隔18个月翻倍,性能也会 翻倍 一般业界认为量子 量子力学建立 量子计算理论发展 量子工程 1930 1960 1980 1990 2000 2010 1993年:姚期 智首次证明了 量子图灵机模 型与量子电路 模型的等价性 2019 量子计算物理实现平台 超导 离子阱 硅量子点 金刚石色心 量子计算机遇和挑战 https://cacm.acm.org/magazines/2013/10/168172-a-blueprint-for-building-a-0 码力 | 34 页 | 5.57 MB | 1 年前3 全球架构师峰会2019北京/量子计算/量子计算及其潜在应用&mdash量子计算及其潜在应用 吕定顺 华为中央研究院高级研究员 吕定顺 量子算法和软件研究 • 吕定顺博士,目前就职于华为2012实验室中 央研究院,毕业于清华大学交叉信息研究院 量子物理学专业,至今在量子计算、量子模 拟领域等已经有7年研究经验。博士期间,曾 在 Nature Physics,PRX,Nature Communication,PRL,PRA 等国际知名期刊 发表论文7篇,H index为7,论文累计引用 Only calculate one sequence at one time Calculate the 2N sequences simultaneously 经典计算机的量子物理极限:《摩尔定律》的失效 算力代表着未来 《摩尔定律》失效 表明未来算力依赖 于量子领域的探索 摩尔定律: 集成电路上的晶体管数目 每隔18个月翻倍,性能也会 翻倍 一般业界认为量子 量子力学建立 量子计算理论发展 量子工程 1930 1960 1980 1990 2000 2010 1993年:姚期 智首次证明了 量子图灵机模 型与量子电路 模型的等价性 2019 量子计算物理实现平台 超导 离子阱 硅量子点 金刚石色心 量子计算机遇和挑战 https://cacm.acm.org/magazines/2013/10/168172-a-blueprint-for-building-a-0 码力 | 34 页 | 5.57 MB | 1 年前3
共 175 条
- 1
- 2
- 3
- 4
- 5
- 6
- 18














