- AWS学习笔记——Chapter5 Identity and Access Management and Security on AWS
坚果壳er
AWS学习
前注:学习书籍IndexIdentityandAccessManagementandSecurityonAWS1.Authentication(认证)2.Authorization(授权)3.Auditing(审核)4.Typesofsecuritycredentials(安全凭证的类型)5.Users6.Groups7.Roles8.IAMHierarchyofPrivileges9.IAMBe
- Java集合类框架源码分析 之 RoleList源码解析 【6】
yunzhonghefei
Java集合类源码分析RoleList源码解析
该类继承于ArrayList,针对Role进行了一些扩展。其他方法和ArrayList中基本相同,源码不做针对性分析:看一下类简介:/***代表了一个roles的列表,作为方法setRoles()的参数,去创建一个关联关系,并且尝试在同一个关系中设置多个角色。*ARoleListrepresentsalistofroles(Roleobjects).Itisusedas*parameterwhen
- uniapp引入uniapp打包的H5跳转H5以及H5返回app方法
qq_Girl200
uni-appwebview前端
在app项目添加webview文件夹添加gridWebview.vue文件。代码如下exportdefault{data(){return{src:'',}},computed:{token(){returnthis.$store.state.login.token||''},roles(){returnthis.$store.state.login.roles||''},userInfo(){r
- Kafka-3.3.4摒弃zookeeper集群部署操作文档
ShoShin1020
kafkazookeeper分布式
一、集群规划kafka从2.8版本开始,就允许用户在不需要zookeeper的情况下运行。真正全面摒弃zookeeper的版本是3.0,在后面的版本kafka使用了新的元数据管理方式kraft,提高了Kafka的可扩展性、可用性和性能。下载地址:ApacheKafka这里下载kafka_2.13-3.4.0.tgz版本,自带有支持raft模式主机名称IPprocess.rolesnode.idma
- 什么是Distroless镜像
青春不流名
开发语言
在Docker环境中,Dockerfile.distroless是指一个使用“distroless”镜像的Dockerfile。Distroless镜像是一种特殊类型的Docker镜像,它们不包含完整的操作系统环境,而是仅包含应用程序运行所需的最小依赖。什么是Distroless镜像?Distroless镜像的核心理念是将镜像体积减小到最小,同时提高安全性。传统的Docker镜像通常包含完整的操作
- Ansible的脚本:playbook
Jessica小戴
ansible网络
Ansible的脚本一、playbook(剧本)1、playbook的组成1.1tasks(任务):每一个tasks就是一个模快1.2variables(变量):存储和传递数据,可以自定义,也可以是全局变量,也可以是脚本外传参1.3templates(模版):用于生成配置文件和多任务的编排1.4handlers(处理器):满足某些条件时触发的操作,一般用于重启等操作1.5roles(角色):组织和
- 服务器axios响应慢,axios异步请求一次踩坑
摸金校尉73
服务器axios响应慢
背景一次在用react写用户修改时,想着将用户基础信息和用户所属角色存储在state中,然后显示。部分代码如下,结果发现运行出来的结果和预料的不一致。这个是为什么呢??真的是纠结了半个下午。classUserEdit{this.state={initialValue:{roleIds:[]}}componentDidMount(){this.treeSelectRoles();this.showU
- openshift node NotReady & kubelet http: TLS handshake error
ghostwritten
openshiftopenshiftkubelethttp
文章目录问题现象解决方法问题现象openshift集群node节点notready$ocgetnodeNAMESTATUSROLESAGEVERSIONmaster1.ocp4.demo.comReadycontrol-plane,master4d14hv1.29.7+6abe8a1master2.ocp4.demo.comReadycontrol-plane,master4d15hv1.29.7
- docker安装Mongodb
无区新手
Dockerdockermongodb
单机dockerrun\--namemongodb1\-d-p27018:27017\--restart=always\-v/data/mongodb/data:/data/db\mongo:4.2.18\--auth#进入mongodbmongo#创建账号db.createUser({user:"root",pwd:"123456",roles:[{role:"root",db:"admin"}
- ansible的脚本
QChestnut
ansible服务器linux
playbook剧本1、playbook的组成1、Tasks:任务,每一个task就是一个模块2、Variables:变量,存储和传递数据,可以自定义变量也可以是全局变量,也可以是脚本外传参3、Templates:模版,用生成配置文件和多任务的编排4、Handlers:处理器,用于满足某些条件时触发的操作,一般用于重启等操作5、Roles:角色,组织和封装剧本的过程,角色可以把任务、变量、模版、处
- day32(8/20)——playbook剧本安装nginx、roles
晗涵¥-¥
nginx运维ansible
目录一、playbook剧本安装nginx二、roles(难点)1、roles介绍2、创建roles的目录结构3、案例4、练习:一、playbook剧本安装nginx[root@m0~]#mkdir/etc/ansible/playbook[root@m0~]#vim/etc/ansible/playbook/nginx.yml----hosts:group02remote_user:rootta
- vue中table表格根据返回数据显示内容及表格字段对应的数据类型是数组
丁先生320
vue.jselementuijavascript
问题1:定义:方法:sfktHouse(row,index){if(row.stopType=="120000"){return"停机保号";}if(row.stopType=="230000"){return"到期停机";}}问题2:方法1:{{orderItems.goodsNbr}}方法2://遍历table中roles数组rolesData(row){letarr=[]row.roles.
- 32次8.21(学习playbook-roles,脚本创建数据库和表,mycat读写分离)
祎安139
运维数据库
1.roles目录介绍files:⽤来存放由copy模块或script模块调⽤的⽂件。tasks:⾄少有⼀个main.yml⽂件,定义各tasks。handlers:有⼀个main.yml⽂件,定义各handlers。templates:⽤来存放jinjia2模板。vars:有⼀个main.yml⽂件,定义变量。meta:有⼀个main.yml⽂件,定义此⻆⾊的特殊设定及其依赖关系。注意:在每个⻆
- 云计算33------学习playbook-roles,脚本创建数据库和表,mycat读写分离
是小梅吖~
云计算学习数据库
上午1、roles(角色)介绍roles(⻆⾊):就是通过分别将variables,tasks及handlers等放置于单独的⽬录中,并可以便捷地调⽤它们的⼀种机制。假设我们要写⼀个playbook来安装管理lamp环境,那么这个playbook就会写很⻓。所以我们希望把这个很⼤的⽂件分成多个功能拆分,分成apache管理,php管理,mysql管理,然后在需要使⽤的时候直接调⽤就可以了,以免重复
- qml 表格TableView 创建
「已注销」
qt_qmlc++前端
1.自动生成表格,函数调用如下://自动生成表格functionupdateColumn(arrayData){if(arrayData.length3){vararrayTypes=arrayData[3];//表格Item的类型}if(arrayTitle.length!==arrayWidth.length||arrayTitle.length>arrayRoles.length){cons
- Wardley’s Doctrine
卢延吉
HowtoSolveNewDeveloperflow
Doctrineassessment(wardleymaps.com)FromtheValueFlywheelEffectTherightstructurecanfosterseveralkeyaspectsthatcontributetooverallsuccess:ClarityandAlignment:Awell-definedstructureclarifiesroles,responsi
- Ansible的脚本 --- playbook 剧本
GnaW1nT
ansible
目录playbook的简介什么是playbookplaybook组成应用实例Templates模块tags模块Roles模块playbook的简介什么是playbookAnsiblePlaybook是设定自动化任务的一种蓝图,可在无需人工干预或有限干预的前提下执行复杂的IT操作。AnsiblePlaybook对一组或一类共同构成Ansible清单的主机执行。AnsiblePlaybook本质上是一
- [ansible] playbook角色
为什么老是名字被占用
自动化运维ansible运维
一、rolesRoles又称为角色,playbook被称为剧本。Roles角色是自1.2版本之后引入的新特性,用于层次性、结构化的组织剧本roles能够根据层次型结构自动装载变量文件、任务集、以及触发的动作等,要使用roles只需要在剧本中使用include命令引入即可简单的来说,roles就是分别将变量、文件、任务、模板以及处理器放置于不同的单独的目录,并且可以便捷的通过include引入角色一
- Ansible 的脚本 --- playbook 剧本
Jahony
linux运维自动化
Ansible的脚本---playbook剧本playbooks本身由以下各部分组成编写yaml文件示例运行playbook定义、引用变量指定远程主机sudo切换用户when条件判断迭代Templates模块1.先准备一个以.j2为后缀的template模板文件,设置引用的变量2.修改主机清单文件,使用主机变量定义一个变量名相同,而值不同的变量3.编写playbooktags模块Roles模块在一
- ansible中的角色使用
李牛克斯小学生
linux
ansibleroles1、ansible中的角色简介角色(roles)是ansible自1.2版本开始引入的新特性,用于层次性、结构化的组织playbook;roles能够根据层次型结构自动装载变量文件、tasks以及handlers等剧本元素;简单的说就是,roles通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们的一种机制;角色一般用于基于主机构建服
- ansible的剧本
王德发666
apache网络服务器
1playbook剧本1.1playbooks的组成Tasks任务,即通过task调用ansible的模板将多个操作组织在一个playbook中运行Variables变量Templates模板Handlers处理器,当changed状态条件满足时,(notify)触发执行的操作Roles角色1.2playbooks剧本范例vimtest1.yaml--- #yaml文件以---开头,以表明这是一
- ansible剧本中的角色
王德发666
ansible
1roles角色1.1roles角色的作用?可以把playbook剧本里的各个play看作为一个角色,将各个角色打的tasks任务、vars变量、template模版和copy、script模块使用的相关文件等内容放置在指定角色的目录里统一管理,在需要的时候可在playbook中使用roles角色直接调用即可。1.2roles的目录格式roles/ #角色总目录,其每个子目录
- MongoDB common command
cn_lyg
mongodb数据库
目录1.Showallexisteddb2.Showallexistedusers3.Showuser'sroles4.Viewcurrentdbname5.CreateorSwitchdb6.Grantprivilegeforauser6.1.Commonuser6.2.Adminuser6.3.AppendprivilegeforMongodbcompass7.Setacollectionin
- 【ansible】通过role角色部署lnmp架构
liu_xueyin
ansible云原生docker容器运维linux
目录一、roles模块的介绍二、roles的目录层次2.1roles内各目录含义解释三、在一个playbook中使用roles模块的步骤四、实操步骤一:完成目录的准备步骤二:完成nginx的roles创建和测试1.准备nginx.repo文件到files子目录中2.完成vars目录中的main.yaml文件的编写准备相应的变量3.准备templates子目录中的.j2模板文件4.准备tasks目录
- 【Kubernetes in Action笔记】1.快速开始
远洋z
kubernetes笔记容器
在Kubernetes上运行一个程序基础运行环境当前的运行环境为使用虚拟机构建的单master集群。[root@k8s-master~]#kubectlgetnodesNAMESTATUSROLESAGEVERSIONk8s-masterReadycontrol-plane109dv1.27.1k8s-node1Ready109dv1.27.1k8s-node2Ready109dv1.27.1No
- springboot+shiro整合,自定义Shiro Filter过滤器
小哇666
shiro#springboot
关于springboot和shiro的整合,可以参考博文https://blog.csdn.net/qq_41712271/article/details/105127925假如:/admin/order=roles["admin,root"],表示/admin/order这个接口需要用户同时具备admin与root角色才可访问,相当于hasAllRoles()这个判断方法而我们的需求:订单信息,
- minikube master 节点的 docker 用户的密码什么?
先看下node的ip地址╰─➤kubectlgetnodes-owideNAMESTATUSROLESAGEVERSIONINTERNAL-IPEXTERNAL-IPOS-IMAGEKERNEL-VERSIONCONTAINER-RUNTIMEminikubeReadycontrol-plane,master4d21hv1.23.9192.168.49.2Ubuntu20.04.5LTS5.15.
- data science 相关问题(part 2)
garrulousabyss
csshtmlcss3
1.WhatareimportantfunctionsusedinDataScience?Withintherealmofdatascience,variouspivotalfunctionsassumecriticalrolesacrossdiversetasks.Amongthese,twofoundationalfunctionsarethecostfunctionandthelossfun
- day 40
斗魂_2e5d
1.ansible剧本角色功能配置说明角色功能有什么用:1)让剧本配置更加规范2)可以让剧本信息简化3)可以在汇总剧本中看到主机信息如何配置角色功能:第一个历程:配置好主机清单vim/etc/ansible/roles/hosts[rsync_server]172.16.1.41[rsync_client]172.16.1.31172.16.1.7[nfs_server]172.16.1.31[n
- Blazor入门100天 : 身份验证和授权 (3) - DB改Sqlite
Densen2014
BootstrapBlazorBlazorBlazor组件数据库sqlitesqlserver
目录建立默认带身份验证Blazor程序角色/组件/特性/过程逻辑DB改Sqlite将自定义字段添加到用户表脚手架拉取IDS文件,本地化资源freesql生成实体类,freesql管理ids数据表初始化Roles,freesql外键=>导航属性完善freesql和bb特性本节源码https://github.com/densen2014/Blazor100/tree/Blazor-%E6%95%99
- SAX解析xml文件
小猪猪08
xml
1.创建SAXParserFactory实例
2.通过SAXParserFactory对象获取SAXParser实例
3.创建一个类SAXParserHander继续DefaultHandler,并且实例化这个类
4.SAXParser实例的parse来获取文件
public static void main(String[] args) {
//
- 为什么mysql里的ibdata1文件不断的增长?
brotherlamp
linuxlinux运维linux资料linux视频linux运维自学
我们在 Percona 支持栏目经常收到关于 MySQL 的 ibdata1 文件的这个问题。
当监控服务器发送一个关于 MySQL 服务器存储的报警时,恐慌就开始了 —— 就是说磁盘快要满了。
一番调查后你意识到大多数地盘空间被 InnoDB 的共享表空间 ibdata1 使用。而你已经启用了 innodbfileper_table,所以问题是:
ibdata1存了什么?
当你启用了 i
- Quartz-quartz.properties配置
eksliang
quartz
其实Quartz JAR文件的org.quartz包下就包含了一个quartz.properties属性配置文件并提供了默认设置。如果需要调整默认配置,可以在类路径下建立一个新的quartz.properties,它将自动被Quartz加载并覆盖默认的设置。
下面是这些默认值的解释
#-----集群的配置
org.quartz.scheduler.instanceName =
- informatica session的使用
18289753290
workflowsessionlogInformatica
如果希望workflow存储最近20次的log,在session里的Config Object设置,log options做配置,save session log :sessions run ;savesessio log for these runs:20
session下面的source 里面有个tracing 
- Scrapy抓取网页时出现CRC check failed 0x471e6e9a != 0x7c07b839L的错误
酷的飞上天空
scrapy
Scrapy版本0.14.4
出现问题现象:
ERROR: Error downloading <GET http://xxxxx CRC check failed
解决方法
1.设置网络请求时的header中的属性'Accept-Encoding': '*;q=0'
明确表示不支持任何形式的压缩格式,避免程序的解压
- java Swing小集锦
永夜-极光
java swing
1.关闭窗体弹出确认对话框
1.1 this.setDefaultCloseOperation (JFrame.DO_NOTHING_ON_CLOSE);
1.2
this.addWindowListener (
new WindowAdapter () {
public void windo
- 强制删除.svn文件夹
随便小屋
java
在windows上,从别处复制的项目中可能带有.svn文件夹,手动删除太麻烦,并且每个文件夹下都有。所以写了个程序进行删除。因为.svn文件夹在windows上是只读的,所以用File中的delete()和deleteOnExist()方法都不能将其删除,所以只能采用windows命令方式进行删除
- GET和POST有什么区别?及为什么网上的多数答案都是错的。
aijuans
get post
如果有人问你,GET和POST,有什么区别?你会如何回答? 我的经历
前几天有人问我这个问题。我说GET是用于获取数据的,POST,一般用于将数据发给服务器之用。
这个答案好像并不是他想要的。于是他继续追问有没有别的区别?我说这就是个名字而已,如果服务器支持,他完全可以把G
- 谈谈新浪微博背后的那些算法
aoyouzi
谈谈新浪微博背后的那些算法
本文对微博中常见的问题的对应算法进行了简单的介绍,在实际应用中的算法比介绍的要复杂的多。当然,本文覆盖的主题并不全,比如好友推荐、热点跟踪等就没有涉及到。但古人云“窥一斑而见全豹”,希望本文的介绍能帮助大家更好的理解微博这样的社交网络应用。
微博是一个很多人都在用的社交应用。天天刷微博的人每天都会进行着这样几个操作:原创、转发、回复、阅读、关注、@等。其中,前四个是针对短博文,最后的关注和@则针
- Connection reset 连接被重置的解决方法
百合不是茶
java字符流连接被重置
流是java的核心部分,,昨天在做android服务器连接服务器的时候出了问题,就将代码放到java中执行,结果还是一样连接被重置
被重置的代码如下;
客户端代码;
package 通信软件服务器;
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.O
- web.xml配置详解之filter
bijian1013
javaweb.xmlfilter
一.定义
<filter>
<filter-name>encodingfilter</filter-name>
<filter-class>com.my.app.EncodingFilter</filter-class>
<init-param>
<param-name>encoding<
- Heritrix
Bill_chen
多线程xml算法制造配置管理
作为纯Java语言开发的、功能强大的网络爬虫Heritrix,其功能极其强大,且扩展性良好,深受热爱搜索技术的盆友们的喜爱,但它配置较为复杂,且源码不好理解,最近又使劲看了下,结合自己的学习和理解,跟大家分享Heritrix的点点滴滴。
Heritrix的下载(http://sourceforge.net/projects/archive-crawler/)安装、配置,就不罗嗦了,可以自己找找资
- 【Zookeeper】FAQ
bit1129
zookeeper
1.脱离IDE,运行简单的Java客户端程序
#ZkClient是简单的Zookeeper~$ java -cp "./:zookeeper-3.4.6.jar:./lib/*" ZKClient
1. Zookeeper是的Watcher回调是同步操作,需要添加异步处理的代码
2. 如果Zookeeper集群跨越多个机房,那么Leader/
- The user specified as a definer ('aaa'@'localhost') does not exist
白糖_
localhost
今天遇到一个客户BUG,当前的jdbc连接用户是root,然后部分删除操作都会报下面这个错误:The user specified as a definer ('aaa'@'localhost') does not exist
最后找原因发现删除操作做了触发器,而触发器里面有这样一句
/*!50017 DEFINER = ''aaa@'localhost' */
原来最初
- javascript中showModelDialog刷新父页面
bozch
JavaScript刷新父页面showModalDialog
在页面中使用showModalDialog打开模式子页面窗口的时候,如果想在子页面中操作父页面中的某个节点,可以通过如下的进行:
window.showModalDialog('url',self,‘status...’); // 首先中间参数使用self
在子页面使用w
- 编程之美-买书折扣
bylijinnan
编程之美
import java.util.Arrays;
public class BookDiscount {
/**编程之美 买书折扣
书上的贪心算法的分析很有意思,我看了半天看不懂,结果作者说,贪心算法在这个问题上是不适用的。。
下面用动态规划实现。
哈利波特这本书一共有五卷,每卷都是8欧元,如果读者一次购买不同的两卷可扣除5%的折扣,三卷10%,四卷20%,五卷
- 关于struts2.3.4项目跨站执行脚本以及远程执行漏洞修复概要
chenbowen00
strutsWEB安全
因为近期负责的几个银行系统软件,需要交付客户,因此客户专门请了安全公司对系统进行了安全评测,结果发现了诸如跨站执行脚本,远程执行漏洞以及弱口令等问题。
下面记录下本次解决的过程以便后续
1、首先从最简单的开始处理,服务器的弱口令问题,首先根据安全工具提供的测试描述中发现应用服务器中存在一个匿名用户,默认是不需要密码的,经过分析发现服务器使用了FTP协议,
而使用ftp协议默认会产生一个匿名用
- [电力与暖气]煤炭燃烧与电力加温
comsci
在宇宙中,用贝塔射线观测地球某个部分,看上去,好像一个个马蜂窝,又像珊瑚礁一样,原来是某个国家的采煤区.....
不过,这个采煤区的煤炭看来是要用完了.....那么依赖将起燃烧并取暖的城市,在极度严寒的季节中...该怎么办呢?
&nbs
- oracle O7_DICTIONARY_ACCESSIBILITY参数
daizj
oracle
O7_DICTIONARY_ACCESSIBILITY参数控制对数据字典的访问.设置为true,如果用户被授予了如select any table等any table权限,用户即使不是dba或sysdba用户也可以访问数据字典.在9i及以上版本默认为false,8i及以前版本默认为true.如果设置为true就可能会带来安全上的一些问题.这也就为什么O7_DICTIONARY_ACCESSIBIL
- 比较全面的MySQL优化参考
dengkane
mysql
本文整理了一些MySQL的通用优化方法,做个简单的总结分享,旨在帮助那些没有专职MySQL DBA的企业做好基本的优化工作,至于具体的SQL优化,大部分通过加适当的索引即可达到效果,更复杂的就需要具体分析了,可以参考本站的一些优化案例或者联系我,下方有我的联系方式。这是上篇。
1、硬件层相关优化
1.1、CPU相关
在服务器的BIOS设置中,可
- C语言homework2,有一个逆序打印数字的小算法
dcj3sjt126com
c
#h1#
0、完成课堂例子
1、将一个四位数逆序打印
1234 ==> 4321
实现方法一:
# include <stdio.h>
int main(void)
{
int i = 1234;
int one = i%10;
int two = i / 10 % 10;
int three = i / 100 % 10;
- apacheBench对网站进行压力测试
dcj3sjt126com
apachebench
ab 的全称是 ApacheBench , 是 Apache 附带的一个小工具 , 专门用于 HTTP Server 的 benchmark testing , 可以同时模拟多个并发请求。前段时间看到公司的开发人员也在用它作一些测试,看起来也不错,很简单,也很容易使用,所以今天花一点时间看了一下。
通过下面的一个简单的例子和注释,相信大家可以更容易理解这个工具的使用。
- 2种办法让HashMap线程安全
flyfoxs
javajdkjni
多线程之--2种办法让HashMap线程安全
多线程之--synchronized 和reentrantlock的优缺点
多线程之--2种JAVA乐观锁的比较( NonfairSync VS. FairSync)
HashMap不是线程安全的,往往在写程序时需要通过一些方法来回避.其实JDK原生的提供了2种方法让HashMap支持线程安全.
- Spring Security(04)——认证简介
234390216
Spring Security认证过程
认证简介
目录
1.1 认证过程
1.2 Web应用的认证过程
1.2.1 ExceptionTranslationFilter
1.2.2 在request之间共享SecurityContext
1
- Java 位运算
Javahuhui
java位运算
// 左移( << ) 低位补0
// 0000 0000 0000 0000 0000 0000 0000 0110 然后左移2位后,低位补0:
// 0000 0000 0000 0000 0000 0000 0001 1000
System.out.println(6 << 2);// 运行结果是24
// 右移( >> ) 高位补"
- mysql免安装版配置
ldzyz007
mysql
1、my-small.ini是为了小型数据库而设计的。不应该把这个模型用于含有一些常用项目的数据库。
2、my-medium.ini是为中等规模的数据库而设计的。如果你正在企业中使用RHEL,可能会比这个操作系统的最小RAM需求(256MB)明显多得多的物理内存。由此可见,如果有那么多RAM内存可以使用,自然可以在同一台机器上运行其它服务。
3、my-large.ini是为专用于一个SQL数据
- MFC和ado数据库使用时遇到的问题
你不认识的休道人
sqlC++mfc
===================================================================
第一个
===================================================================
try{
CString sql;
sql.Format("select * from p
- 表单重复提交Double Submits
rensanning
double
可能发生的场景:
*多次点击提交按钮
*刷新页面
*点击浏览器回退按钮
*直接访问收藏夹中的地址
*重复发送HTTP请求(Ajax)
(1)点击按钮后disable该按钮一会儿,这样能避免急躁的用户频繁点击按钮。
这种方法确实有些粗暴,友好一点的可以把按钮的文字变一下做个提示,比如Bootstrap的做法:
http://getbootstrap.co
- Java String 十大常见问题
tomcat_oracle
java正则表达式
1.字符串比较,使用“==”还是equals()? "=="判断两个引用的是不是同一个内存地址(同一个物理对象)。 equals()判断两个字符串的值是否相等。 除非你想判断两个string引用是否同一个对象,否则应该总是使用equals()方法。 如果你了解字符串的驻留(String Interning)则会更好地理解这个问题。
- SpringMVC 登陆拦截器实现登陆控制
xp9802
springMVC
思路,先登陆后,将登陆信息存储在session中,然后通过拦截器,对系统中的页面和资源进行访问拦截,同时对于登陆本身相关的页面和资源不拦截。
实现方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23