diff --git a/Makefile b/Makefile
index 61f6c53..c92ae39 100644
--- a/Makefile
+++ b/Makefile
@@ -48,6 +48,7 @@
                  github.com/opencord/bbsim/internal/...
 
 setup_tools: $(GO_TOOLS_BIN)
+	GO111MODULE=on go mod download all
 
 $(GO_TOOLS_BIN): $(GO_TOOLS_VENDOR)
 	GO111MODULE=on GOBIN="$(PWD)/$(TOOLS_BIN)" go install $(GO_TOOLS)
@@ -201,6 +202,7 @@
 api/bbsim/bbsim.pb.go api/bbsim/bbsim.pb.gw.go: api/bbsim/bbsim.proto api/bbsim/bbsim.yaml
 	@protoc -I. \
 		-I${GOOGLEAPI}/third_party/googleapis \
+		-I${VOLTHA_PROTOS}/protos/ \
     	--go_out=plugins=grpc:./ \
 		--grpc-gateway_out=logtostderr=true,grpc_api_configuration=api/bbsim/bbsim.yaml,allow_delete_body=true:./ \
     	$<
diff --git a/VERSION b/VERSION
index 0ead0c6..1f104bd 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.0.17-dev
+0.0.18-dev
diff --git a/api/bbsim/bbsim.pb.go b/api/bbsim/bbsim.pb.go
index 41683e0..ca04c84 100644
--- a/api/bbsim/bbsim.pb.go
+++ b/api/bbsim/bbsim.pb.go
@@ -7,6 +7,7 @@
 	context "context"
 	fmt "fmt"
 	proto "github.com/golang/protobuf/proto"
+	tech_profile "github.com/opencord/voltha-protos/v2/go/tech_profile"
 	grpc "google.golang.org/grpc"
 	codes "google.golang.org/grpc/codes"
 	status "google.golang.org/grpc/status"
@@ -129,7 +130,7 @@
 }
 
 func (AlarmType_Types) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{6, 0}
+	return fileDescriptor_ef7750073d18011b, []int{7, 0}
 }
 
 type PONPort struct {
@@ -408,6 +409,45 @@
 	return 0
 }
 
+type ONUTrafficSchedulers struct {
+	TraffSchedulers      *tech_profile.TrafficSchedulers `protobuf:"bytes,1,opt,name=traffSchedulers,proto3" json:"traffSchedulers,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *ONUTrafficSchedulers) Reset()         { *m = ONUTrafficSchedulers{} }
+func (m *ONUTrafficSchedulers) String() string { return proto.CompactTextString(m) }
+func (*ONUTrafficSchedulers) ProtoMessage()    {}
+func (*ONUTrafficSchedulers) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ef7750073d18011b, []int{4}
+}
+
+func (m *ONUTrafficSchedulers) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ONUTrafficSchedulers.Unmarshal(m, b)
+}
+func (m *ONUTrafficSchedulers) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ONUTrafficSchedulers.Marshal(b, m, deterministic)
+}
+func (m *ONUTrafficSchedulers) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ONUTrafficSchedulers.Merge(m, src)
+}
+func (m *ONUTrafficSchedulers) XXX_Size() int {
+	return xxx_messageInfo_ONUTrafficSchedulers.Size(m)
+}
+func (m *ONUTrafficSchedulers) XXX_DiscardUnknown() {
+	xxx_messageInfo_ONUTrafficSchedulers.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ONUTrafficSchedulers proto.InternalMessageInfo
+
+func (m *ONUTrafficSchedulers) GetTraffSchedulers() *tech_profile.TrafficSchedulers {
+	if m != nil {
+		return m.TraffSchedulers
+	}
+	return nil
+}
+
 type ONUs struct {
 	Items                []*ONU   `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
@@ -419,7 +459,7 @@
 func (m *ONUs) String() string { return proto.CompactTextString(m) }
 func (*ONUs) ProtoMessage()    {}
 func (*ONUs) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{4}
+	return fileDescriptor_ef7750073d18011b, []int{5}
 }
 
 func (m *ONUs) XXX_Unmarshal(b []byte) error {
@@ -458,7 +498,7 @@
 func (m *ONURequest) String() string { return proto.CompactTextString(m) }
 func (*ONURequest) ProtoMessage()    {}
 func (*ONURequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{5}
+	return fileDescriptor_ef7750073d18011b, []int{6}
 }
 
 func (m *ONURequest) XXX_Unmarshal(b []byte) error {
@@ -496,7 +536,7 @@
 func (m *AlarmType) String() string { return proto.CompactTextString(m) }
 func (*AlarmType) ProtoMessage()    {}
 func (*AlarmType) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{6}
+	return fileDescriptor_ef7750073d18011b, []int{7}
 }
 
 func (m *AlarmType) XXX_Unmarshal(b []byte) error {
@@ -529,7 +569,7 @@
 func (m *AlarmParameter) String() string { return proto.CompactTextString(m) }
 func (*AlarmParameter) ProtoMessage()    {}
 func (*AlarmParameter) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{7}
+	return fileDescriptor_ef7750073d18011b, []int{8}
 }
 
 func (m *AlarmParameter) XXX_Unmarshal(b []byte) error {
@@ -565,7 +605,7 @@
 }
 
 // AlarmRequest includes fields common to every alarm,
-// plus an optional list of AlarmParemter list that can be used
+// plus an optional list of AlarmParameter list that can be used
 // to set additional fields in alarms that support them.
 type AlarmRequest struct {
 	AlarmType            string            `protobuf:"bytes,1,opt,name=AlarmType,proto3" json:"AlarmType,omitempty"`
@@ -581,7 +621,7 @@
 func (m *AlarmRequest) String() string { return proto.CompactTextString(m) }
 func (*AlarmRequest) ProtoMessage()    {}
 func (*AlarmRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{8}
+	return fileDescriptor_ef7750073d18011b, []int{9}
 }
 
 func (m *AlarmRequest) XXX_Unmarshal(b []byte) error {
@@ -644,7 +684,7 @@
 func (m *VersionNumber) String() string { return proto.CompactTextString(m) }
 func (*VersionNumber) ProtoMessage()    {}
 func (*VersionNumber) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{9}
+	return fileDescriptor_ef7750073d18011b, []int{10}
 }
 
 func (m *VersionNumber) XXX_Unmarshal(b []byte) error {
@@ -705,7 +745,7 @@
 func (m *LogLevel) String() string { return proto.CompactTextString(m) }
 func (*LogLevel) ProtoMessage()    {}
 func (*LogLevel) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{10}
+	return fileDescriptor_ef7750073d18011b, []int{11}
 }
 
 func (m *LogLevel) XXX_Unmarshal(b []byte) error {
@@ -752,7 +792,7 @@
 func (m *Response) String() string { return proto.CompactTextString(m) }
 func (*Response) ProtoMessage()    {}
 func (*Response) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{11}
+	return fileDescriptor_ef7750073d18011b, []int{12}
 }
 
 func (m *Response) XXX_Unmarshal(b []byte) error {
@@ -799,7 +839,7 @@
 func (m *IgmpRequest) String() string { return proto.CompactTextString(m) }
 func (*IgmpRequest) ProtoMessage()    {}
 func (*IgmpRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{12}
+	return fileDescriptor_ef7750073d18011b, []int{13}
 }
 
 func (m *IgmpRequest) XXX_Unmarshal(b []byte) error {
@@ -844,7 +884,7 @@
 func (m *Empty) String() string { return proto.CompactTextString(m) }
 func (*Empty) ProtoMessage()    {}
 func (*Empty) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{13}
+	return fileDescriptor_ef7750073d18011b, []int{14}
 }
 
 func (m *Empty) XXX_Unmarshal(b []byte) error {
@@ -872,6 +912,7 @@
 	proto.RegisterType((*NNIPort)(nil), "bbsim.NNIPort")
 	proto.RegisterType((*Olt)(nil), "bbsim.Olt")
 	proto.RegisterType((*ONU)(nil), "bbsim.ONU")
+	proto.RegisterType((*ONUTrafficSchedulers)(nil), "bbsim.ONUTrafficSchedulers")
 	proto.RegisterType((*ONUs)(nil), "bbsim.ONUs")
 	proto.RegisterType((*ONURequest)(nil), "bbsim.ONURequest")
 	proto.RegisterType((*AlarmType)(nil), "bbsim.AlarmType")
@@ -887,85 +928,90 @@
 func init() { proto.RegisterFile("api/bbsim/bbsim.proto", fileDescriptor_ef7750073d18011b) }
 
 var fileDescriptor_ef7750073d18011b = []byte{
-	// 1097 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0xdf, 0x6e, 0xea, 0xc6,
-	0x13, 0x86, 0x80, 0xf9, 0x33, 0x10, 0xe2, 0x4c, 0xfe, 0xfc, 0xac, 0x28, 0xfa, 0x35, 0xb2, 0x4e,
-	0xab, 0x9c, 0xa3, 0x36, 0xa7, 0x27, 0x69, 0xd5, 0x54, 0xea, 0x8d, 0x03, 0x0e, 0x71, 0x0f, 0xb1,
-	0xd1, 0xda, 0x10, 0xe5, 0xca, 0x32, 0xb0, 0x22, 0x96, 0x6c, 0xcc, 0xb1, 0xcd, 0x89, 0xf2, 0x00,
-	0x7d, 0x8e, 0x3e, 0x49, 0xdf, 0xa1, 0x37, 0xbd, 0xed, 0x7b, 0xf4, 0xae, 0x5a, 0x7b, 0x6d, 0x20,
-	0x89, 0x2a, 0xd4, 0x9b, 0xde, 0xa0, 0x9d, 0x6f, 0xbe, 0x6f, 0x76, 0x66, 0x76, 0x77, 0x0c, 0x1c,
-	0x38, 0x73, 0xf7, 0xfd, 0x68, 0x14, 0xb9, 0x7e, 0xfa, 0x7b, 0x36, 0x0f, 0x83, 0x38, 0x40, 0x21,
-	0x31, 0xe4, 0x1f, 0xa0, 0xda, 0x37, 0xf4, 0x7e, 0x10, 0xc6, 0xd8, 0x82, 0x2d, 0xad, 0x23, 0x15,
-	0x4f, 0x8a, 0xa7, 0x02, 0xd9, 0xd2, 0x3a, 0x78, 0x0c, 0x75, 0x63, 0x4e, 0x43, 0x33, 0x76, 0x62,
-	0x2a, 0x6d, 0x9d, 0x14, 0x4f, 0xeb, 0x64, 0x09, 0x30, 0xa1, 0xae, 0x6b, 0xff, 0x42, 0xf8, 0x47,
-	0x11, 0x4a, 0x86, 0xf7, 0x52, 0x25, 0x43, 0xd3, 0xa4, 0xa1, 0xeb, 0x78, 0xfa, 0xc2, 0x1f, 0xd1,
-	0x90, 0x0b, 0xd7, 0xb0, 0xf5, 0xc8, 0xa5, 0x67, 0x91, 0xf1, 0x0d, 0x6c, 0x6b, 0xb3, 0x98, 0x86,
-	0x33, 0xc7, 0x4b, 0x19, 0xe5, 0x84, 0xb1, 0x0e, 0xe2, 0x3b, 0xa8, 0xf1, 0xc4, 0x23, 0x49, 0x38,
-	0x29, 0x9d, 0x36, 0xce, 0x5b, 0x67, 0x69, 0x63, 0x38, 0x4c, 0x72, 0x3f, 0xe3, 0xf2, 0xee, 0x44,
-	0x52, 0x65, 0x8d, 0xcb, 0x61, 0x92, 0xfb, 0xe5, 0xbf, 0x58, 0x5d, 0xfa, 0xe0, 0x3f, 0xab, 0xeb,
-	0x18, 0xea, 0xfd, 0x60, 0xc6, 0x72, 0xd1, 0x3a, 0x92, 0x90, 0x6c, 0xbf, 0x04, 0x10, 0xa1, 0x6c,
-	0x5a, 0xce, 0x54, 0xaa, 0x24, 0x8e, 0x64, 0xcd, 0xb0, 0x36, 0xc3, 0xaa, 0x29, 0xc6, 0xd6, 0x2c,
-	0xca, 0xcd, 0xa3, 0x32, 0x99, 0x84, 0x34, 0x8a, 0xa4, 0x5a, 0x9a, 0x49, 0x0e, 0xe0, 0x21, 0x54,
-	0x58, 0x3c, 0x3d, 0x90, 0xea, 0x89, 0x86, 0x5b, 0xf2, 0x29, 0x94, 0x0d, 0x7d, 0x10, 0xe1, 0x09,
-	0x08, 0x6e, 0x4c, 0xfd, 0x48, 0x2a, 0x26, 0xcd, 0x02, 0xde, 0x2c, 0x43, 0x1f, 0x90, 0xd4, 0x21,
-	0x7f, 0x0b, 0xc0, 0x2c, 0xfa, 0x69, 0x41, 0xa3, 0xf8, 0x45, 0x6f, 0x8a, 0x2f, 0x7b, 0x23, 0xff,
-	0x59, 0x82, 0xba, 0xe2, 0x39, 0xa1, 0x6f, 0x3d, 0xcd, 0xa9, 0xfc, 0x7b, 0x09, 0x04, 0xb6, 0x88,
-	0xb0, 0x0a, 0xa5, 0x9e, 0x61, 0x8a, 0x05, 0x6c, 0x01, 0x74, 0xee, 0x35, 0xbd, 0x6b, 0x77, 0x15,
-	0xb3, 0x2f, 0x16, 0x71, 0x1b, 0xea, 0x86, 0x3e, 0xb0, 0x95, 0x9e, 0x42, 0x6e, 0xc5, 0x2d, 0xfc,
-	0x1f, 0xec, 0x31, 0xd3, 0xb4, 0x14, 0x62, 0x0d, 0xfa, 0xf6, 0xb5, 0xa2, 0xf5, 0x06, 0x44, 0x15,
-	0x4b, 0x78, 0x08, 0x98, 0x38, 0xb4, 0xae, 0xae, 0xf4, 0xec, 0x8e, 0xda, 0x25, 0x4a, 0x47, 0x15,
-	0xcb, 0x99, 0xa0, 0x43, 0xb4, 0x6b, 0xcb, 0x36, 0xae, 0xed, 0x3b, 0x4d, 0xef, 0x18, 0x77, 0xa2,
-	0x80, 0xc7, 0x20, 0x31, 0x47, 0xcf, 0x30, 0x4d, 0x86, 0x1b, 0xb7, 0x6d, 0xcd, 0x6e, 0xdf, 0x28,
-	0xba, 0xae, 0xf6, 0xc4, 0x4a, 0xbe, 0x4f, 0x12, 0xce, 0xcc, 0xf7, 0xa9, 0xe2, 0x5b, 0xf8, 0x92,
-	0x39, 0x2c, 0xa2, 0xe8, 0xe6, 0xad, 0x66, 0x9a, 0x9a, 0xa1, 0xdb, 0x9a, 0x6e, 0xa9, 0xe4, 0x5a,
-	0x25, 0xaa, 0xde, 0x56, 0xed, 0x3b, 0x85, 0xe8, 0x9a, 0xde, 0x15, 0x6b, 0x78, 0x04, 0x87, 0x49,
-	0xea, 0x6d, 0x4b, 0x1b, 0x2a, 0x16, 0x23, 0x66, 0x61, 0xea, 0x28, 0xc1, 0x3e, 0xf3, 0xf5, 0x89,
-	0xd1, 0x56, 0x4d, 0x93, 0xd5, 0xab, 0x12, 0x62, 0x10, 0x11, 0xf0, 0x04, 0x8e, 0x57, 0xf3, 0xfa,
-	0xa8, 0xde, 0xdb, 0xe6, 0xbd, 0xde, 0xce, 0xb5, 0x0d, 0x3c, 0x80, 0x5d, 0xc6, 0xd0, 0xac, 0x81,
-	0xdd, 0x37, 0x74, 0xd6, 0x0b, 0xcb, 0x14, 0x9b, 0xb8, 0x0b, 0xdb, 0x79, 0xa7, 0x98, 0x5c, 0xdc,
-	0x7e, 0x0e, 0x5d, 0x89, 0xad, 0xac, 0xb0, 0x0c, 0xea, 0xb7, 0x6d, 0x56, 0x85, 0xb8, 0x93, 0xf5,
-	0x63, 0xcd, 0xd1, 0xe6, 0x59, 0x89, 0x88, 0xd0, 0x5a, 0xf5, 0x5e, 0x6b, 0xe2, 0x2e, 0xee, 0xc1,
-	0xce, 0x2a, 0xa6, 0xdc, 0x6a, 0x22, 0xca, 0x97, 0xd0, 0x4a, 0xce, 0xb7, 0xef, 0x84, 0x8e, 0x4f,
-	0x63, 0x1a, 0xa2, 0x08, 0xa5, 0x8f, 0xf4, 0x89, 0xdf, 0x06, 0xb6, 0xc4, 0x7d, 0x10, 0x86, 0x8e,
-	0xb7, 0xc8, 0xc6, 0x49, 0x6a, 0xc8, 0xbf, 0x16, 0xa1, 0x99, 0x48, 0xb3, 0xfb, 0x74, 0xbc, 0x72,
-	0x55, 0xb8, 0x7c, 0x09, 0x6c, 0xf4, 0x12, 0x0f, 0xa1, 0xc2, 0x9e, 0xd3, 0x22, 0xe2, 0xcf, 0x90,
-	0x5b, 0xf8, 0x3d, 0x40, 0x9e, 0x5f, 0x24, 0x95, 0x93, 0xeb, 0x7d, 0xc0, 0xaf, 0xf7, 0x7a, 0xf6,
-	0x64, 0x85, 0x28, 0xff, 0x52, 0x84, 0xed, 0x21, 0x0d, 0x23, 0x37, 0x98, 0xf1, 0x0d, 0x24, 0xa8,
-	0x7e, 0x4e, 0x01, 0x9e, 0x60, 0x66, 0xb2, 0xe4, 0x47, 0x0b, 0xd7, 0x9b, 0x58, 0xae, 0x9f, 0x8f,
-	0xcd, 0x1c, 0xc0, 0xff, 0x03, 0x8c, 0x03, 0xdf, 0x77, 0xe3, 0x1b, 0x27, 0x7a, 0xe0, 0xc9, 0xad,
-	0x20, 0x4c, 0x3d, 0x75, 0x63, 0x9e, 0x7b, 0x3a, 0x20, 0x96, 0x80, 0x7c, 0x09, 0xb5, 0x5e, 0x30,
-	0xed, 0xd1, 0xcf, 0xd4, 0x63, 0xbd, 0xf4, 0xd8, 0x82, 0xef, 0x9f, 0x1a, 0xac, 0xf0, 0xb1, 0xe3,
-	0x79, 0xbc, 0x2d, 0x35, 0xc2, 0x2d, 0x59, 0x85, 0x1a, 0xa1, 0xd1, 0x3c, 0x98, 0x45, 0x14, 0xbf,
-	0x80, 0x46, 0x94, 0xc4, 0xb3, 0xc7, 0xc1, 0x84, 0xf2, 0x19, 0x07, 0x29, 0xd4, 0x0e, 0x26, 0x94,
-	0x15, 0xe7, 0xd3, 0x28, 0x72, 0xa6, 0x59, 0x01, 0x99, 0x29, 0x47, 0xd0, 0xd0, 0xa6, 0xfe, 0x3c,
-	0x3b, 0xa8, 0xb7, 0x50, 0x31, 0x66, 0x0b, 0x42, 0x3f, 0x25, 0x41, 0x1a, 0xe7, 0xbb, 0x2b, 0x93,
-	0x22, 0xa5, 0x10, 0x4e, 0xc0, 0x1f, 0xa1, 0x69, 0x2e, 0x46, 0xca, 0x38, 0x76, 0x83, 0xd9, 0xd0,
-	0xf1, 0x92, 0xc0, 0xad, 0xbc, 0xf7, 0xb9, 0x2b, 0x19, 0x0a, 0x64, 0x8d, 0x2a, 0x57, 0x41, 0x50,
-	0xfd, 0x79, 0xfc, 0xf4, 0xee, 0x03, 0xb4, 0xd6, 0x89, 0x58, 0x83, 0xf2, 0xcf, 0x86, 0xa6, 0x8b,
-	0x05, 0xac, 0x83, 0xd0, 0x53, 0x95, 0xa1, 0x2a, 0x16, 0x11, 0xa0, 0xc2, 0xc0, 0xe1, 0x85, 0xb8,
-	0x75, 0xfe, 0x9b, 0x00, 0xc2, 0xd5, 0x95, 0xe9, 0xfa, 0xf8, 0x1e, 0xaa, 0xfc, 0x08, 0xb1, 0xc9,
-	0x77, 0x4d, 0xa2, 0x1e, 0xed, 0x73, 0x6b, 0xed, 0x80, 0xe5, 0x02, 0xbe, 0x81, 0x4a, 0x97, 0xc6,
-	0xec, 0x1b, 0xb7, 0xce, 0xcf, 0xc7, 0xa1, 0x17, 0xcb, 0x05, 0xfc, 0x06, 0xa0, 0x1f, 0x3c, 0xd2,
-	0x30, 0x98, 0xbd, 0x64, 0xee, 0x70, 0x2b, 0xeb, 0xbc, 0x5c, 0xc0, 0x33, 0x68, 0x98, 0x0f, 0x8b,
-	0x78, 0x12, 0x3c, 0x6e, 0xc6, 0xff, 0x1a, 0xea, 0x84, 0x8e, 0x82, 0x20, 0xde, 0x88, 0xfd, 0x15,
-	0x54, 0x59, 0xca, 0x6c, 0x86, 0xaf, 0x73, 0x1b, 0xcb, 0x83, 0x89, 0xe4, 0x02, 0x3b, 0xb7, 0x94,
-	0x87, 0x2f, 0x4f, 0xec, 0x68, 0x65, 0xdc, 0xcb, 0x05, 0xfc, 0x00, 0x0d, 0x93, 0xc6, 0xf9, 0xad,
-	0xcb, 0x36, 0xcd, 0x80, 0xa3, 0xe7, 0x80, 0x5c, 0xc0, 0x8b, 0x95, 0x1a, 0x5f, 0xdf, 0xe2, 0x95,
-	0xd4, 0xcf, 0x97, 0x7d, 0xdc, 0x58, 0xf3, 0x1d, 0x34, 0x09, 0x8d, 0x62, 0x27, 0x8c, 0x55, 0x67,
-	0x1e, 0x78, 0x1b, 0xaa, 0x2e, 0xa0, 0xc1, 0x55, 0x9d, 0x87, 0xf1, 0x7c, 0x43, 0xd1, 0x4f, 0x80,
-	0x26, 0x8d, 0x93, 0x11, 0xa1, 0xcd, 0x26, 0xee, 0xd8, 0x61, 0x77, 0x10, 0xf7, 0x56, 0x47, 0xc7,
-	0x3f, 0xa8, 0x2f, 0x61, 0xa7, 0xfd, 0xe0, 0xcc, 0xa6, 0x94, 0x3d, 0x9e, 0xf4, 0x3b, 0x8f, 0x9c,
-	0xb5, 0xf2, 0x9c, 0x5e, 0x51, 0x8e, 0x2a, 0xc9, 0xdf, 0xbc, 0x8b, 0xbf, 0x03, 0x00, 0x00, 0xff,
-	0xff, 0x8d, 0xb6, 0x31, 0x2d, 0xff, 0x09, 0x00, 0x00,
+	// 1172 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0x4f, 0x6f, 0xe2, 0x46,
+	0x14, 0x87, 0xf0, 0xff, 0x41, 0x88, 0x33, 0xbb, 0x9b, 0xb5, 0xd2, 0xa8, 0x8b, 0xac, 0x6d, 0x95,
+	0x5d, 0xb5, 0xd9, 0x6e, 0xd2, 0xaa, 0x5b, 0xa9, 0x17, 0x07, 0x1c, 0xe2, 0x86, 0x8c, 0xd1, 0xd8,
+	0x10, 0xe5, 0x64, 0x19, 0x98, 0x80, 0x25, 0x1b, 0xb3, 0xb6, 0x49, 0x94, 0x0f, 0xd0, 0x4b, 0xbf,
+	0x44, 0xbf, 0x52, 0x2f, 0xbd, 0xf6, 0x7b, 0xf4, 0x56, 0x8d, 0x3d, 0x36, 0x38, 0x44, 0x15, 0xea,
+	0xa5, 0x17, 0x34, 0xef, 0xf7, 0x7e, 0xbf, 0x37, 0x6f, 0xde, 0x9b, 0x79, 0x18, 0x5e, 0x59, 0x0b,
+	0xfb, 0xc3, 0x68, 0x14, 0xd8, 0x6e, 0xfc, 0x7b, 0xb2, 0xf0, 0xbd, 0xd0, 0x43, 0xa5, 0xc8, 0x38,
+	0x6c, 0xdd, 0x7b, 0x4e, 0x38, 0xb3, 0xcc, 0x08, 0x0c, 0x3e, 0x84, 0x74, 0x3c, 0x63, 0xeb, 0x3b,
+	0xdb, 0xa1, 0x31, 0x51, 0xfa, 0x11, 0x2a, 0x7d, 0x0d, 0xf7, 0x3d, 0x3f, 0x44, 0x4d, 0xd8, 0x51,
+	0x3b, 0x62, 0xbe, 0x95, 0x3f, 0x2e, 0x91, 0x1d, 0xb5, 0x83, 0x8e, 0xa0, 0xa6, 0x2d, 0xa8, 0xaf,
+	0x87, 0x56, 0x48, 0xc5, 0x9d, 0x56, 0xfe, 0xb8, 0x46, 0x56, 0x00, 0x13, 0x62, 0xac, 0xfe, 0x07,
+	0xe1, 0x9f, 0x79, 0x28, 0x68, 0xce, 0xa6, 0x4a, 0x82, 0x86, 0x4e, 0x7d, 0xdb, 0x72, 0xf0, 0xd2,
+	0x1d, 0x51, 0x9f, 0x0b, 0x33, 0x58, 0x36, 0x72, 0xe1, 0x49, 0x64, 0xf4, 0x16, 0x76, 0xd5, 0x79,
+	0x48, 0xfd, 0xb9, 0xe5, 0xc4, 0x8c, 0x62, 0xc4, 0xc8, 0x82, 0xe8, 0x3d, 0x54, 0x79, 0xe2, 0x81,
+	0x58, 0x6a, 0x15, 0x8e, 0xeb, 0xa7, 0xcd, 0x93, 0xb8, 0x74, 0x1c, 0x26, 0xa9, 0x9f, 0x71, 0x79,
+	0x75, 0x02, 0xb1, 0x9c, 0xe1, 0x72, 0x98, 0xa4, 0x7e, 0xe9, 0x6f, 0x76, 0x2e, 0x3c, 0xf8, 0xdf,
+	0xce, 0x75, 0x04, 0xb5, 0xbe, 0x37, 0x67, 0xb9, 0xa8, 0x1d, 0xb1, 0x14, 0x6d, 0xbf, 0x02, 0x10,
+	0x82, 0xa2, 0x6e, 0x58, 0x53, 0xb1, 0x1c, 0x39, 0xa2, 0x35, 0xc3, 0xda, 0x0c, 0xab, 0xc4, 0x18,
+	0x5b, 0xb3, 0x28, 0x97, 0x0f, 0xf2, 0x64, 0xe2, 0xd3, 0x20, 0x10, 0xab, 0x71, 0x26, 0x29, 0x80,
+	0x0e, 0xa0, 0xcc, 0xe2, 0x61, 0x4f, 0xac, 0x45, 0x1a, 0x6e, 0x49, 0x16, 0xbc, 0xd4, 0xf0, 0xc0,
+	0xf0, 0xad, 0xbb, 0x3b, 0x7b, 0xac, 0x8f, 0x67, 0x74, 0xb2, 0x74, 0xa8, 0x1f, 0x20, 0x15, 0xf6,
+	0x42, 0x06, 0xae, 0xa0, 0xa8, 0x30, 0xf5, 0xd3, 0x37, 0x27, 0x99, 0xbb, 0xb8, 0xa1, 0x24, 0x4f,
+	0x75, 0xd2, 0x31, 0x14, 0x35, 0x3c, 0x08, 0x50, 0x0b, 0x4a, 0x76, 0x48, 0x5d, 0x16, 0x88, 0xf5,
+	0x03, 0x78, 0x3f, 0x34, 0x3c, 0x20, 0xb1, 0x43, 0xfa, 0x0e, 0x80, 0x59, 0xf4, 0xf3, 0x92, 0x06,
+	0xe1, 0x46, 0xf9, 0xf3, 0x9b, 0xe5, 0x97, 0xfe, 0x2a, 0x40, 0x4d, 0x76, 0x2c, 0xdf, 0x35, 0x1e,
+	0x17, 0x54, 0xfa, 0xa3, 0x00, 0x25, 0xb6, 0x08, 0x50, 0x05, 0x0a, 0x3d, 0x4d, 0x17, 0x72, 0xa8,
+	0x09, 0xd0, 0xb9, 0x55, 0x71, 0xd7, 0xec, 0xca, 0x7a, 0x5f, 0xc8, 0xa3, 0x5d, 0xa8, 0x69, 0x78,
+	0x60, 0xca, 0x3d, 0x99, 0x5c, 0x0b, 0x3b, 0xe8, 0x35, 0xbc, 0x60, 0xa6, 0x6e, 0xc8, 0xc4, 0x18,
+	0xf4, 0xcd, 0x0b, 0x59, 0xed, 0x0d, 0x88, 0x22, 0x14, 0xd0, 0x01, 0xa0, 0xc8, 0xa1, 0x76, 0xb1,
+	0xdc, 0x33, 0x3b, 0x4a, 0x97, 0xc8, 0x1d, 0x45, 0x28, 0x26, 0x82, 0x0e, 0x51, 0x2f, 0x0c, 0x53,
+	0xbb, 0x30, 0x6f, 0x54, 0xdc, 0xd1, 0x6e, 0x84, 0x12, 0x3a, 0x02, 0x91, 0x39, 0x7a, 0x9a, 0xae,
+	0x33, 0x5c, 0xbb, 0x6e, 0xab, 0x66, 0xfb, 0x52, 0xc6, 0x58, 0xe9, 0x09, 0xe5, 0x74, 0x9f, 0x28,
+	0x9c, 0x9e, 0xee, 0x53, 0x41, 0xef, 0xe0, 0x2b, 0xe6, 0x30, 0x88, 0x8c, 0xf5, 0x6b, 0x55, 0xd7,
+	0x55, 0x0d, 0x9b, 0x2a, 0x36, 0x14, 0x72, 0xa1, 0x10, 0x05, 0xb7, 0x15, 0xf3, 0x46, 0x26, 0x58,
+	0xc5, 0x5d, 0xa1, 0x8a, 0x0e, 0xe1, 0x20, 0x4a, 0xbd, 0x6d, 0xa8, 0x43, 0xd9, 0x60, 0xc4, 0x24,
+	0x4c, 0x0d, 0x89, 0x51, 0x1b, 0xcd, 0x3e, 0xd1, 0xda, 0x8a, 0xae, 0xb3, 0xf3, 0x2a, 0x84, 0x68,
+	0x44, 0x00, 0xd4, 0x82, 0xa3, 0xf5, 0xbc, 0xae, 0x94, 0x5b, 0x53, 0xbf, 0xc5, 0xed, 0x54, 0x5b,
+	0x47, 0xaf, 0x60, 0x9f, 0x31, 0x54, 0x63, 0x60, 0xf6, 0x35, 0xcc, 0x6a, 0x61, 0xe8, 0x42, 0x03,
+	0xed, 0xc3, 0x6e, 0x5a, 0x29, 0x26, 0x17, 0x76, 0x9f, 0x42, 0xe7, 0x42, 0x33, 0x39, 0x58, 0x02,
+	0xf5, 0xdb, 0x26, 0x3b, 0x85, 0xb0, 0x97, 0xd4, 0x23, 0xe3, 0x68, 0xf3, 0xac, 0x04, 0x84, 0xa0,
+	0xb9, 0xee, 0xbd, 0x50, 0x85, 0x7d, 0xf4, 0x02, 0xf6, 0xd6, 0x31, 0xf9, 0x5a, 0x15, 0x90, 0xf4,
+	0x09, 0x9a, 0x51, 0x7f, 0xfb, 0x96, 0x6f, 0xb9, 0x34, 0xa4, 0x3e, 0x12, 0xa0, 0x70, 0x45, 0x1f,
+	0xf9, 0x6d, 0x60, 0x4b, 0xf4, 0x12, 0x4a, 0x43, 0xcb, 0x59, 0x26, 0x13, 0x2b, 0x36, 0xa4, 0xdf,
+	0xf3, 0xd0, 0x88, 0xa4, 0xc9, 0x7d, 0x3a, 0x5a, 0xbb, 0x2a, 0x5c, 0xbe, 0x02, 0xb6, 0x7a, 0xec,
+	0x07, 0x50, 0x66, 0x2f, 0x76, 0x19, 0xf0, 0x97, 0xce, 0x2d, 0xf4, 0x03, 0x40, 0x9a, 0x5f, 0x20,
+	0x16, 0xa3, 0xeb, 0xfd, 0x8a, 0x5f, 0xef, 0x6c, 0xf6, 0x64, 0x8d, 0x28, 0xfd, 0x9a, 0x87, 0xdd,
+	0x21, 0xf5, 0x03, 0xdb, 0x9b, 0xf3, 0x0d, 0x44, 0xa8, 0xdc, 0xc7, 0x00, 0x4f, 0x30, 0x31, 0x59,
+	0xf2, 0xa3, 0xa5, 0xed, 0x4c, 0x0c, 0xdb, 0x4d, 0x27, 0x73, 0x0a, 0xa0, 0x2f, 0x01, 0xc6, 0x9e,
+	0xeb, 0xda, 0xe1, 0xa5, 0x15, 0xcc, 0x78, 0x72, 0x6b, 0x08, 0x53, 0x4f, 0xed, 0x90, 0xe7, 0x1e,
+	0xcf, 0xa0, 0x15, 0x20, 0x7d, 0x82, 0x6a, 0xcf, 0x9b, 0xf6, 0xe8, 0x3d, 0x75, 0x58, 0x2d, 0x1d,
+	0xb6, 0xe0, 0xfb, 0xc7, 0x06, 0x3b, 0xf8, 0xd8, 0x72, 0x1c, 0x5e, 0x96, 0x2a, 0xe1, 0x96, 0xa4,
+	0x40, 0x95, 0xd0, 0x60, 0xe1, 0xcd, 0x03, 0x8a, 0xde, 0x40, 0x3d, 0x88, 0xe2, 0x99, 0x63, 0x6f,
+	0x42, 0xf9, 0x18, 0x85, 0x18, 0x6a, 0x7b, 0x13, 0xca, 0x0e, 0xe7, 0xd2, 0x20, 0xb0, 0xa6, 0xc9,
+	0x01, 0x12, 0x53, 0x0a, 0xa0, 0xae, 0x4e, 0xdd, 0x45, 0xd2, 0xa8, 0x77, 0x50, 0xd6, 0xe6, 0x4b,
+	0x42, 0x3f, 0xf3, 0x91, 0xb3, 0xbf, 0x36, 0x29, 0x62, 0x0a, 0xe1, 0x04, 0xf4, 0x13, 0x34, 0xf4,
+	0xe5, 0x48, 0x1e, 0x87, 0xb6, 0x37, 0x1f, 0x5a, 0x4e, 0x14, 0xb8, 0x99, 0xd6, 0x3e, 0x75, 0x45,
+	0x43, 0x81, 0x64, 0xa8, 0x52, 0x05, 0x4a, 0x8a, 0xbb, 0x08, 0x1f, 0xdf, 0x7f, 0x84, 0x66, 0x96,
+	0x88, 0xaa, 0x50, 0xfc, 0x45, 0x53, 0xb1, 0x90, 0x43, 0x35, 0x28, 0xf5, 0x14, 0x79, 0xa8, 0x08,
+	0x79, 0x04, 0x50, 0x66, 0xe0, 0xf0, 0x4c, 0xd8, 0x39, 0xfd, 0xad, 0x0c, 0xa5, 0xf3, 0x73, 0xdd,
+	0x76, 0xd1, 0x07, 0xa8, 0xf0, 0x16, 0xa2, 0x06, 0xdf, 0x35, 0x8a, 0x7a, 0xf8, 0x92, 0x5b, 0x99,
+	0x06, 0x4b, 0x39, 0xf4, 0x16, 0xca, 0x5d, 0x1a, 0xb2, 0xbf, 0xd1, 0x2c, 0x3f, 0x1d, 0x87, 0x4e,
+	0x28, 0xe5, 0xd0, 0xb7, 0x00, 0x7d, 0xef, 0x81, 0xfa, 0xde, 0x7c, 0x93, 0xb9, 0xc7, 0xad, 0xa4,
+	0xf2, 0x52, 0x0e, 0x9d, 0x40, 0x5d, 0x9f, 0x2d, 0xc3, 0x89, 0xf7, 0xb0, 0x1d, 0xff, 0x1b, 0xa8,
+	0x11, 0x3a, 0xf2, 0xbc, 0x70, 0x2b, 0xf6, 0xd7, 0x50, 0x61, 0x29, 0xb3, 0x19, 0x9e, 0xe5, 0xd6,
+	0x57, 0x8d, 0x09, 0xa4, 0x1c, 0xeb, 0x5b, 0xcc, 0x43, 0x9b, 0x1d, 0x3b, 0x5c, 0x1b, 0xf7, 0x52,
+	0x0e, 0x7d, 0x84, 0xba, 0x4e, 0xc3, 0xf4, 0xd6, 0x25, 0x9b, 0x26, 0xc0, 0xe1, 0x53, 0x40, 0xca,
+	0xa1, 0xb3, 0xb5, 0x33, 0x3e, 0xbf, 0xc5, 0x33, 0xa9, 0x9f, 0xae, 0xea, 0xb8, 0xb5, 0xe6, 0x7b,
+	0x68, 0x10, 0x1a, 0x84, 0x96, 0x1f, 0x2a, 0xd6, 0xc2, 0x73, 0xb6, 0x54, 0x9d, 0x41, 0x9d, 0xab,
+	0x3a, 0xb3, 0xf1, 0x62, 0x4b, 0xd1, 0xcf, 0x80, 0x74, 0x1a, 0x46, 0x23, 0x42, 0x9d, 0x4f, 0xec,
+	0xb1, 0xc5, 0xee, 0x20, 0x7a, 0xb1, 0x3e, 0x3a, 0xfe, 0x45, 0xfd, 0x09, 0xf6, 0xda, 0x33, 0x6b,
+	0x3e, 0xa5, 0xec, 0xf1, 0xc4, 0x9f, 0x12, 0x88, 0xb3, 0xd6, 0x9e, 0xd3, 0x73, 0xca, 0x2b, 0x78,
+	0xcd, 0x3a, 0x35, 0x5f, 0x6e, 0xfe, 0xf1, 0x3f, 0x93, 0xf8, 0x17, 0x2b, 0x68, 0x83, 0x2f, 0xe5,
+	0x46, 0xe5, 0xe8, 0x7b, 0xf4, 0xec, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x87, 0x16, 0x3d, 0xe3,
+	0xd1, 0x0a, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
 var _ context.Context
-var _ grpc.ClientConn
+var _ grpc.ClientConnInterface
 
 // This is a compile-time assertion to ensure that this generated file
 // is compatible with the grpc package it is being compiled against.
-const _ = grpc.SupportPackageIsVersion4
+const _ = grpc.SupportPackageIsVersion6
 
 // BBSimClient is the client API for BBSim service.
 //
@@ -985,13 +1031,14 @@
 	RestartDhcp(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*Response, error)
 	SetAlarmIndication(ctx context.Context, in *AlarmRequest, opts ...grpc.CallOption) (*Response, error)
 	ChangeIgmpState(ctx context.Context, in *IgmpRequest, opts ...grpc.CallOption) (*Response, error)
+	GetOnuTrafficSchedulers(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*ONUTrafficSchedulers, error)
 }
 
 type bBSimClient struct {
-	cc *grpc.ClientConn
+	cc grpc.ClientConnInterface
 }
 
-func NewBBSimClient(cc *grpc.ClientConn) BBSimClient {
+func NewBBSimClient(cc grpc.ClientConnInterface) BBSimClient {
 	return &bBSimClient{cc}
 }
 
@@ -1121,6 +1168,15 @@
 	return out, nil
 }
 
+func (c *bBSimClient) GetOnuTrafficSchedulers(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*ONUTrafficSchedulers, error) {
+	out := new(ONUTrafficSchedulers)
+	err := c.cc.Invoke(ctx, "/bbsim.BBSim/GetOnuTrafficSchedulers", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // BBSimServer is the server API for BBSim service.
 type BBSimServer interface {
 	Version(context.Context, *Empty) (*VersionNumber, error)
@@ -1137,6 +1193,7 @@
 	RestartDhcp(context.Context, *ONURequest) (*Response, error)
 	SetAlarmIndication(context.Context, *AlarmRequest) (*Response, error)
 	ChangeIgmpState(context.Context, *IgmpRequest) (*Response, error)
+	GetOnuTrafficSchedulers(context.Context, *ONURequest) (*ONUTrafficSchedulers, error)
 }
 
 // UnimplementedBBSimServer can be embedded to have forward compatible implementations.
@@ -1185,6 +1242,9 @@
 func (*UnimplementedBBSimServer) ChangeIgmpState(ctx context.Context, req *IgmpRequest) (*Response, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method ChangeIgmpState not implemented")
 }
+func (*UnimplementedBBSimServer) GetOnuTrafficSchedulers(ctx context.Context, req *ONURequest) (*ONUTrafficSchedulers, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetOnuTrafficSchedulers not implemented")
+}
 
 func RegisterBBSimServer(s *grpc.Server, srv BBSimServer) {
 	s.RegisterService(&_BBSim_serviceDesc, srv)
@@ -1442,6 +1502,24 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _BBSim_GetOnuTrafficSchedulers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ONURequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BBSimServer).GetOnuTrafficSchedulers(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/bbsim.BBSim/GetOnuTrafficSchedulers",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BBSimServer).GetOnuTrafficSchedulers(ctx, req.(*ONURequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _BBSim_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "bbsim.BBSim",
 	HandlerType: (*BBSimServer)(nil),
@@ -1502,6 +1580,10 @@
 			MethodName: "ChangeIgmpState",
 			Handler:    _BBSim_ChangeIgmpState_Handler,
 		},
+		{
+			MethodName: "GetOnuTrafficSchedulers",
+			Handler:    _BBSim_GetOnuTrafficSchedulers_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "api/bbsim/bbsim.proto",
diff --git a/api/bbsim/bbsim.pb.gw.go b/api/bbsim/bbsim.pb.gw.go
index 51ead9a..32d8670 100644
--- a/api/bbsim/bbsim.pb.gw.go
+++ b/api/bbsim/bbsim.pb.gw.go
@@ -378,6 +378,60 @@
 
 }
 
+func request_BBSim_GetOnuTrafficSchedulers_0(ctx context.Context, marshaler runtime.Marshaler, client BBSimClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq ONURequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["SerialNumber"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "SerialNumber")
+	}
+
+	protoReq.SerialNumber, err = runtime.String(val)
+
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "SerialNumber", err)
+	}
+
+	msg, err := client.GetOnuTrafficSchedulers(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_BBSim_GetOnuTrafficSchedulers_0(ctx context.Context, marshaler runtime.Marshaler, server BBSimServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq ONURequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["SerialNumber"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "SerialNumber")
+	}
+
+	protoReq.SerialNumber, err = runtime.String(val)
+
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "SerialNumber", err)
+	}
+
+	msg, err := server.GetOnuTrafficSchedulers(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
 // RegisterBBSimHandlerServer registers the http handlers for service BBSim to "mux".
 // UnaryRPC     :call BBSimServer directly.
 // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
@@ -543,6 +597,26 @@
 
 	})
 
+	mux.Handle("GET", pattern_BBSim_GetOnuTrafficSchedulers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_BBSim_GetOnuTrafficSchedulers_0(rctx, inboundMarshaler, server, req, pathParams)
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_BBSim_GetOnuTrafficSchedulers_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
 	return nil
 }
 
@@ -744,6 +818,26 @@
 
 	})
 
+	mux.Handle("GET", pattern_BBSim_GetOnuTrafficSchedulers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateContext(ctx, mux, req)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_BBSim_GetOnuTrafficSchedulers_0(rctx, inboundMarshaler, client, req, pathParams)
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_BBSim_GetOnuTrafficSchedulers_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
 	return nil
 }
 
@@ -763,6 +857,8 @@
 	pattern_BBSim_PoweronONU_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "olt", "onus", "SerialNumber"}, "", runtime.AssumeColonVerbOpt(true)))
 
 	pattern_BBSim_SetAlarmIndication_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"v1", "olt", "onus", "SerialNumber", "alarms", "AlarmType", "Status"}, "", runtime.AssumeColonVerbOpt(true)))
+
+	pattern_BBSim_GetOnuTrafficSchedulers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"v1", "olt", "onus", "SerialNumber", "trafficschedulers"}, "", runtime.AssumeColonVerbOpt(true)))
 )
 
 var (
@@ -781,4 +877,6 @@
 	forward_BBSim_PoweronONU_0 = runtime.ForwardResponseMessage
 
 	forward_BBSim_SetAlarmIndication_0 = runtime.ForwardResponseMessage
+
+	forward_BBSim_GetOnuTrafficSchedulers_0 = runtime.ForwardResponseMessage
 )
diff --git a/api/bbsim/bbsim.proto b/api/bbsim/bbsim.proto
index a448b3b..a9643b6 100644
--- a/api/bbsim/bbsim.proto
+++ b/api/bbsim/bbsim.proto
@@ -15,6 +15,7 @@
 syntax = "proto3";
 package bbsim;
 
+import "voltha_protos/tech_profile.proto";
 // Models
 
 message PONPort {
@@ -48,6 +49,10 @@
     int32 PortNo = 9;
 }
 
+message ONUTrafficSchedulers {
+    tech_profile.TrafficSchedulers traffSchedulers = 1;
+}
+
 message ONUs {
     repeated ONU items = 1;
 }
@@ -95,7 +100,7 @@
 }
 
 // AlarmRequest includes fields common to every alarm,
-// plus an optional list of AlarmParemter list that can be used
+// plus an optional list of AlarmParameter list that can be used
 // to set additional fields in alarms that support them.
 message AlarmRequest {
     string AlarmType = 1;                   // name of alarm to raise
@@ -151,4 +156,5 @@
     rpc RestartDhcp (ONURequest) returns (Response) {}
     rpc SetAlarmIndication (AlarmRequest) returns (Response) {}
     rpc ChangeIgmpState (IgmpRequest) returns (Response) {}
+    rpc GetOnuTrafficSchedulers (ONURequest) returns (ONUTrafficSchedulers) {}
 }
diff --git a/api/bbsim/bbsim.yaml b/api/bbsim/bbsim.yaml
index fa30479..977102a 100644
--- a/api/bbsim/bbsim.yaml
+++ b/api/bbsim/bbsim.yaml
@@ -33,3 +33,5 @@
     post: "/v1/olt/onus/{SerialNumber}"
   - selector: bbsim.BBSim.SetAlarmIndication
     post: "/v1/olt/onus/{SerialNumber}/alarms/{AlarmType}/{Status}"
+  - selector: bbsim.BBSim.GetOnuTrafficSchedulers
+    get: "/v1/olt/onus/{SerialNumber}/trafficschedulers"
diff --git a/cmd/bbr/bbr.go b/cmd/bbr/bbr.go
index c5a373d..9e1ebc5 100644
--- a/cmd/bbr/bbr.go
+++ b/cmd/bbr/bbr.go
@@ -80,6 +80,7 @@
 		true, // this parameter is not important in the BBR Case
 		0,    // this parameter does not matter in the BBR case
 		options.BBSim.ControlledActivation,
+		false, // this parameter is not important in the BBR Case
 		true,
 	)
 
diff --git a/cmd/bbsim/bbsim.go b/cmd/bbsim/bbsim.go
index f2a1c37..275ec34 100644
--- a/cmd/bbsim/bbsim.go
+++ b/cmd/bbsim/bbsim.go
@@ -155,6 +155,7 @@
 		"Dhcp":                 options.BBSim.EnableDhcp,
 		"Delay":                options.BBSim.Delay,
 		"ControlledActivation": options.BBSim.ControlledActivation,
+		"EnablePerf":           options.BBSim.EnablePerf,
 	}).Info("BroadBand Simulator is on")
 
 	// control channels, they are only closed when the goroutine needs to be terminated
@@ -171,6 +172,7 @@
 		options.BBSim.EnableDhcp,
 		options.BBSim.Delay,
 		options.BBSim.ControlledActivation,
+		options.BBSim.EnablePerf,
 		false,
 	)
 
diff --git a/configs/bbsim.yaml b/configs/bbsim.yaml
index 77ffa62..2db7ac1 100644
--- a/configs/bbsim.yaml
+++ b/configs/bbsim.yaml
@@ -10,6 +10,7 @@
   api_address: ":50070"
   rest_api_address: ":50071"
   controlled_activation: "default"
+  enable_perf: false
   # legacy_api_address: ":50072"
   # legacy_rest_api_address: ":50073"
   # sadis_rest_address: ":50073"
diff --git a/go.mod b/go.mod
index a0814e3..29f71b5 100644
--- a/go.mod
+++ b/go.mod
@@ -13,6 +13,7 @@
 	github.com/jessevdk/go-flags v1.4.0
 	github.com/jhump/protoreflect v1.5.0
 	github.com/looplab/fsm v0.1.0
+	github.com/olekukonko/tablewriter v0.0.4
 	github.com/opencord/cordctl v0.0.0-20190909161711-01e9c1f04bf4
 	github.com/opencord/omci-sim v0.0.4
 	github.com/opencord/voltha-protos/v2 v2.1.2
diff --git a/go.sum b/go.sum
index 6570aa6..231793e 100644
--- a/go.sum
+++ b/go.sum
@@ -40,6 +40,10 @@
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/looplab/fsm v0.1.0 h1:Qte7Zdn/5hBNbXzP7yxVU4OIFHWXBovyTT2LaBTyC20=
 github.com/looplab/fsm v0.1.0/go.mod h1:m2VaOfDHxqXBBMgc26m6yUOwkFn8H2AlJDE+jd/uafI=
+github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54=
+github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
+github.com/olekukonko/tablewriter v0.0.4 h1:vHD/YYe1Wolo78koG299f7V/VAS08c6IpCLn+Ejf/w8=
+github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA=
 github.com/opencord/cordctl v0.0.0-20190909161711-01e9c1f04bf4 h1:Odib2px8tyALzdbyztAAqdxmpmQ/pJahJ7uz8kN/rvk=
 github.com/opencord/cordctl v0.0.0-20190909161711-01e9c1f04bf4/go.mod h1:/+3S0pwQUy7HeKnH0KfKp5W6hmh/LdZzuZTNT/m7vA4=
 github.com/opencord/omci-sim v0.0.4 h1:kN8zi/8gkcHOkXPk27Wp6Wwp8ggUylXcD/egW7PUXmc=
diff --git a/internal/bbsim/api/onus_handler.go b/internal/bbsim/api/onus_handler.go
index 2c16872..b9c697c 100644
--- a/internal/bbsim/api/onus_handler.go
+++ b/internal/bbsim/api/onus_handler.go
@@ -53,7 +53,6 @@
 
 func (s BBSimServer) GetONU(ctx context.Context, req *bbsim.ONURequest) (*bbsim.ONU, error) {
 	olt := devices.GetOLT()
-
 	onu, err := olt.FindOnuBySn(req.SerialNumber)
 
 	if err != nil {
@@ -76,7 +75,7 @@
 }
 
 func (s BBSimServer) ShutdownONU(ctx context.Context, req *bbsim.ONURequest) (*bbsim.Response, error) {
-	// NOTE this method is now sendying a Dying Gasp and then disabling the device (operState: down, adminState: up),
+	// NOTE this method is now sending a Dying Gasp and then disabling the device (operState: down, adminState: up),
 	// is this the only way to do? Should we address other cases?
 	// Investigate what happens when:
 	// - a fiber is pulled
@@ -209,8 +208,8 @@
 			event = "igmp_join_start"
 		case bbsim.SubActionTypes_LEAVE:
 			event = "igmp_leave"
-                case bbsim.SubActionTypes_JOINV3:
-                        event = "igmp_join_startv3"
+		case bbsim.SubActionTypes_JOINV3:
+			event = "igmp_join_startv3"
 		}
 
 		if igmpErr := onu.InternalState.Event(event); igmpErr != nil {
@@ -295,3 +294,21 @@
 
 	return res, nil
 }
+
+func (s BBSimServer) GetOnuTrafficSchedulers(ctx context.Context, req *bbsim.ONURequest) (*bbsim.ONUTrafficSchedulers, error) {
+	olt := devices.GetOLT()
+	ts := bbsim.ONUTrafficSchedulers{}
+
+	onu, err := olt.FindOnuBySn(req.SerialNumber)
+	if err != nil {
+		return &ts, err
+	}
+
+	if onu.TrafficSchedulers != nil {
+		ts.TraffSchedulers = onu.TrafficSchedulers
+		return &ts, nil
+	} else {
+		ts.TraffSchedulers = nil
+		return &ts, nil
+	}
+}
diff --git a/internal/bbsim/devices/messageTypes.go b/internal/bbsim/devices/messageTypes.go
index 31a09c5..4872af0 100644
--- a/internal/bbsim/devices/messageTypes.go
+++ b/internal/bbsim/devices/messageTypes.go
@@ -47,8 +47,8 @@
 	IGMPMembershipReportV2 MessageType = 15 // Version 2 Membership Report (JOIN)
 	IGMPLeaveGroup         MessageType = 16 // Leave Group
 
-	AlarmIndication MessageType = 17 // message data is an openolt.AlarmIndication
-        IGMPMembershipReportV3 MessageType = 18// Version 3 Membership Report
+	AlarmIndication        MessageType = 17 // message data is an openolt.AlarmIndication
+	IGMPMembershipReportV3 MessageType = 18 // Version 3 Membership Report
 )
 
 func (m MessageType) String() string {
@@ -70,7 +70,7 @@
 		"OnuPacketIn",
 		"IGMPMembershipReportV2",
 		"IGMPLeaveGroup",
-                "IGMPMembershipReportV3",
+		"IGMPMembershipReportV3",
 	}
 	return names[m]
 }
diff --git a/internal/bbsim/devices/olt.go b/internal/bbsim/devices/olt.go
index 9acee9f..955d2ad 100644
--- a/internal/bbsim/devices/olt.go
+++ b/internal/bbsim/devices/olt.go
@@ -33,7 +33,7 @@
 	"github.com/opencord/bbsim/internal/common"
 	omcisim "github.com/opencord/omci-sim"
 	"github.com/opencord/voltha-protos/v2/go/openolt"
-	"github.com/opencord/voltha-protos/v2/go/tech_profile"
+	tech_profile "github.com/opencord/voltha-protos/v2/go/tech_profile"
 	log "github.com/sirupsen/logrus"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/reflection"
@@ -69,6 +69,7 @@
 	enableContextCancel context.CancelFunc
 
 	OpenoltStream *openolt.Openolt_EnableIndicationServer
+	enablePerf    bool
 }
 
 var olt OltDevice
@@ -78,7 +79,7 @@
 	return &olt
 }
 
-func CreateOLT(oltId int, nni int, pon int, onuPerPon int, sTag int, cTagInit int, auth bool, dhcp bool, delay int, ca string, isMock bool) *OltDevice {
+func CreateOLT(oltId int, nni int, pon int, onuPerPon int, sTag int, cTagInit int, auth bool, dhcp bool, delay int, ca string, enablePerf bool, isMock bool) *OltDevice {
 	oltLogger.WithFields(log.Fields{
 		"ID":           oltId,
 		"NumNni":       nni,
@@ -98,6 +99,7 @@
 		Pons:         []*PonPort{},
 		Nnis:         []*NniPort{},
 		Delay:        delay,
+		enablePerf:   enablePerf,
 	}
 
 	if val, ok := ControlledActivationModes[ca]; ok {
@@ -1069,13 +1071,49 @@
 	return new(openolt.Empty), nil
 }
 
-func (s OltDevice) CreateTrafficSchedulers(context.Context, *tech_profile.TrafficSchedulers) (*openolt.Empty, error) {
-	oltLogger.Info("received CreateTrafficSchedulers")
+func (s OltDevice) CreateTrafficSchedulers(context context.Context, trafficSchedulers *tech_profile.TrafficSchedulers) (*openolt.Empty, error) {
+	oltLogger.WithFields(log.Fields{
+		"OnuId":     trafficSchedulers.OnuId,
+		"IntfId":    trafficSchedulers.IntfId,
+		"OnuPortNo": trafficSchedulers.PortNo,
+	}).Info("received CreateTrafficSchedulers")
+
+	if !s.enablePerf {
+		pon, err := s.GetPonById(trafficSchedulers.IntfId)
+		if err != nil {
+			oltLogger.Errorf("Error retrieving PON by IntfId: %v", err)
+			return new(openolt.Empty), err
+		}
+		onu, err := pon.GetOnuById(trafficSchedulers.OnuId)
+		if err != nil {
+			oltLogger.Errorf("Error retrieving ONU from pon by OnuId: %v", err)
+			return new(openolt.Empty), err
+		}
+		onu.TrafficSchedulers = trafficSchedulers
+	}
 	return new(openolt.Empty), nil
 }
 
-func (s OltDevice) RemoveTrafficSchedulers(context.Context, *tech_profile.TrafficSchedulers) (*openolt.Empty, error) {
-	oltLogger.Info("received RemoveTrafficSchedulers")
+func (s OltDevice) RemoveTrafficSchedulers(context context.Context, trafficSchedulers *tech_profile.TrafficSchedulers) (*openolt.Empty, error) {
+	oltLogger.WithFields(log.Fields{
+		"OnuId":     trafficSchedulers.OnuId,
+		"IntfId":    trafficSchedulers.IntfId,
+		"OnuPortNo": trafficSchedulers.PortNo,
+	}).Info("received RemoveTrafficSchedulers")
+	if !s.enablePerf {
+		pon, err := s.GetPonById(trafficSchedulers.IntfId)
+		if err != nil {
+			oltLogger.Errorf("Error retrieving PON by IntfId: %v", err)
+			return new(openolt.Empty), err
+		}
+		onu, err := pon.GetOnuById(trafficSchedulers.OnuId)
+		if err != nil {
+			oltLogger.Errorf("Error retrieving ONU from pon by OnuId: %v", err)
+			return new(openolt.Empty), err
+		}
+
+		onu.TrafficSchedulers = nil
+	}
 	return new(openolt.Empty), nil
 }
 
diff --git a/internal/bbsim/devices/onu.go b/internal/bbsim/devices/onu.go
index 3415083..c0bdb46 100644
--- a/internal/bbsim/devices/onu.go
+++ b/internal/bbsim/devices/onu.go
@@ -35,6 +35,7 @@
 	omcilib "github.com/opencord/bbsim/internal/common/omci"
 	omcisim "github.com/opencord/omci-sim"
 	"github.com/opencord/voltha-protos/v2/go/openolt"
+	tech_profile "github.com/opencord/voltha-protos/v2/go/tech_profile"
 	log "github.com/sirupsen/logrus"
 )
 
@@ -73,7 +74,8 @@
 	seqNumber  uint16
 	HasGemPort bool
 
-	DoneChannel chan bool // this channel is used to signal once the onu is complete (when the struct is used by BBR)
+	DoneChannel       chan bool // this channel is used to signal once the onu is complete (when the struct is used by BBR)
+	TrafficSchedulers *tech_profile.TrafficSchedulers
 }
 
 func (o *Onu) Sn() string {
@@ -256,12 +258,12 @@
 					Type: IGMPLeaveGroup}
 				o.Channel <- msg
 			},
-                        "igmp_join_startv3": func(e *fsm.Event) {
-                                msg := Message{
-                                        Type: IGMPMembershipReportV3,
-                                }
-                                o.Channel <- msg
-                        },
+			"igmp_join_startv3": func(e *fsm.Event) {
+				msg := Message{
+					Type: IGMPMembershipReportV3,
+				}
+				o.Channel <- msg
+			},
 		},
 	)
 
@@ -379,9 +381,9 @@
 			case IGMPLeaveGroup:
 				log.Infof("Recieved IGMPLeaveGroupV2 message on ONU channel")
 				igmp.SendIGMPLeaveGroupV2(o.PonPortID, o.ID, o.Sn(), o.PortNo, o.HwAddress, stream)
-                        case IGMPMembershipReportV3:
-                                log.Infof("Recieved IGMPMembershipReportV3 message on ONU channel")
-                                igmp.SendIGMPMembershipReportV3(o.PonPortID, o.ID, o.Sn(), o.PortNo, o.HwAddress, stream)
+			case IGMPMembershipReportV3:
+				log.Infof("Recieved IGMPMembershipReportV3 message on ONU channel")
+				igmp.SendIGMPMembershipReportV3(o.PonPortID, o.ID, o.Sn(), o.PortNo, o.HwAddress, stream)
 			default:
 				onuLogger.Warnf("Received unknown message data %v for type %v in OLT Channel", message.Data, message.Type)
 			}
@@ -758,7 +760,7 @@
 		"OnuSn":   common.OnuSnToString(o.SerialNumber),
 		"Pkt":     msg.OmciInd.Pkt,
 		"msgType": msgType,
-	}).Trace("ONU Receveives OMCI Msg")
+	}).Trace("ONU Receives OMCI Msg")
 	switch msgType {
 	default:
 		log.WithFields(log.Fields{
diff --git a/internal/bbsim/responders/igmp/igmp.go b/internal/bbsim/responders/igmp/igmp.go
index a57810e..75f2759 100644
--- a/internal/bbsim/responders/igmp/igmp.go
+++ b/internal/bbsim/responders/igmp/igmp.go
@@ -15,14 +15,15 @@
 
 import (
 	"encoding/binary"
+	"net"
+	"time"
+
 	"github.com/google/gopacket"
 	"github.com/google/gopacket/layers"
 	bbsim "github.com/opencord/bbsim/internal/bbsim/types"
 	omci "github.com/opencord/omci-sim"
 	"github.com/opencord/voltha-protos/v2/go/openolt"
 	log "github.com/sirupsen/logrus"
-	"net"
-	"time"
 )
 
 func SendIGMPLeaveGroupV2(ponPortId uint32, onuId uint32, serialNumber string, portNo uint32, macAddress net.HardwareAddr, stream bbsim.Stream) error {
@@ -128,86 +129,86 @@
 }
 
 func SendIGMPMembershipReportV3(ponPortId uint32, onuId uint32, serialNumber string, portNo uint32, macAddress net.HardwareAddr, stream bbsim.Stream) error {
-       log.WithFields(log.Fields{
-               "OnuId": onuId,
-               "SerialNumber": serialNumber,
-               "PortNo": portNo,
-    }).Debugf("Entered SendIGMPMembershipReportV3")
-    igmp := createIGMPV3MembershipReportPacket()
-       pkt, err := serializeIgmpPacket(ponPortId, onuId, macAddress, igmp)
+	log.WithFields(log.Fields{
+		"OnuId":        onuId,
+		"SerialNumber": serialNumber,
+		"PortNo":       portNo,
+	}).Debugf("Entered SendIGMPMembershipReportV3")
+	igmp := createIGMPV3MembershipReportPacket()
+	pkt, err := serializeIgmpPacket(ponPortId, onuId, macAddress, igmp)
 
-       if err != nil {
-               log.WithFields(log.Fields{
-                        "OnuId":  onuId,
-                        "IntfId": ponPortId,
-                        "SerialNumber": serialNumber,
-                }).Errorf("Seriliazation of igmp packet failed :  %s", err)
-                return err
-       }
+	if err != nil {
+		log.WithFields(log.Fields{
+			"OnuId":        onuId,
+			"IntfId":       ponPortId,
+			"SerialNumber": serialNumber,
+		}).Errorf("Seriliazation of igmp packet failed :  %s", err)
+		return err
+	}
 
-       gemid, err := omci.GetGemPortId(ponPortId, onuId)
-       if err != nil {
-               log.WithFields(log.Fields{
-                       "OnuId":  onuId,
-                       "IntfId": ponPortId,
-                        "SerialNumber": serialNumber,
-               }).Errorf("Can't retrieve GemPortId for IGMP: %s", err)
-               return err
-       }
+	gemid, err := omci.GetGemPortId(ponPortId, onuId)
+	if err != nil {
+		log.WithFields(log.Fields{
+			"OnuId":        onuId,
+			"IntfId":       ponPortId,
+			"SerialNumber": serialNumber,
+		}).Errorf("Can't retrieve GemPortId for IGMP: %s", err)
+		return err
+	}
 
-       data := &openolt.Indication_PktInd{
-               PktInd: &openolt.PacketIndication{
-                       IntfType:  "pon",
-                       IntfId:    ponPortId,
-                       GemportId: uint32(gemid),
-                       Pkt:       pkt,
-                       PortNo:    portNo,
-               },
-       }
-        //Sending IGMP packets
-        if err := stream.Send(&openolt.Indication{Data: data}); err != nil {
-                log.Errorf("Fail to send IGMP PktInd indication for ONU: %s, IntfId: %s, SerialNumber: %s,  error: %v", onuId, ponPortId, serialNumber, err)
-                return err
-        }
-        return nil
+	data := &openolt.Indication_PktInd{
+		PktInd: &openolt.PacketIndication{
+			IntfType:  "pon",
+			IntfId:    ponPortId,
+			GemportId: uint32(gemid),
+			Pkt:       pkt,
+			PortNo:    portNo,
+		},
+	}
+	//Sending IGMP packets
+	if err := stream.Send(&openolt.Indication{Data: data}); err != nil {
+		log.Errorf("Fail to send IGMP PktInd indication for ONU: %s, IntfId: %s, SerialNumber: %s,  error: %v", onuId, ponPortId, serialNumber, err)
+		return err
+	}
+	return nil
 }
 
 func createIGMPV3MembershipReportPacket() IGMP {
 
-       groupRecord1:= IGMPv3GroupRecord{
-           Type:             IGMPv3GroupRecordType(IGMPIsIn),
-           AuxDataLen:       0, // this should always be 0 as per IGMPv3 spec.
-           NumberOfSources:  3,
-           MulticastAddress: net.IPv4(224, 0, 0, 22),
-           SourceAddresses:  []net.IP{net.IPv4(15, 14, 20, 24), net.IPv4(15, 14, 20, 26), net.IPv4(15, 14, 20, 25)},
-           AuxData:          0, // NOT USED
-       }
+	groupRecord1 := IGMPv3GroupRecord{
+		Type:             IGMPv3GroupRecordType(IGMPIsIn),
+		AuxDataLen:       0, // this should always be 0 as per IGMPv3 spec.
+		NumberOfSources:  3,
+		MulticastAddress: net.IPv4(224, 0, 0, 22),
+		SourceAddresses:  []net.IP{net.IPv4(15, 14, 20, 24), net.IPv4(15, 14, 20, 26), net.IPv4(15, 14, 20, 25)},
+		AuxData:          0, // NOT USED
+	}
 
-       groupRecord2:= IGMPv3GroupRecord{
-           Type:             IGMPv3GroupRecordType(IGMPIsIn),
-           AuxDataLen:       0, // this should always be 0 as per IGMPv3 spec.
-           NumberOfSources:  2,
-           MulticastAddress: net.IPv4(224, 0, 0, 25),
-           SourceAddresses:  []net.IP{net.IPv4(15, 14, 20, 30), net.IPv4(15, 14, 20, 31)},
-           AuxData:          0, // NOT USED
-       }
+	groupRecord2 := IGMPv3GroupRecord{
+		Type:             IGMPv3GroupRecordType(IGMPIsIn),
+		AuxDataLen:       0, // this should always be 0 as per IGMPv3 spec.
+		NumberOfSources:  2,
+		MulticastAddress: net.IPv4(224, 0, 0, 25),
+		SourceAddresses:  []net.IP{net.IPv4(15, 14, 20, 30), net.IPv4(15, 14, 20, 31)},
+		AuxData:          0, // NOT USED
+	}
 
-       igmpDefault := IGMP{
-               Type:                    0x22, //IGMPV3 Membership Report
-               MaxResponseTime:         time.Duration(1),
-               Checksum:                0,
-               GroupAddress:            net.IPv4(224, 0, 0, 22),
-               SupressRouterProcessing: false,
-               RobustnessValue:         0,
-               IntervalTime:            time.Duration(1),
-               SourceAddresses:         []net.IP{net.IPv4(224, 0, 0, 24)},
-               NumberOfGroupRecords:    2,
-               NumberOfSources:         1,
-               GroupRecords:            []IGMPv3GroupRecord{groupRecord1, groupRecord2},
-               Version:                 3,
-       }
+	igmpDefault := IGMP{
+		Type:                    0x22, //IGMPV3 Membership Report
+		MaxResponseTime:         time.Duration(1),
+		Checksum:                0,
+		GroupAddress:            net.IPv4(224, 0, 0, 22),
+		SupressRouterProcessing: false,
+		RobustnessValue:         0,
+		IntervalTime:            time.Duration(1),
+		SourceAddresses:         []net.IP{net.IPv4(224, 0, 0, 24)},
+		NumberOfGroupRecords:    2,
+		NumberOfSources:         1,
+		GroupRecords:            []IGMPv3GroupRecord{groupRecord1, groupRecord2},
+		Version:                 3,
+	}
 
-       return igmpDefault
+	return igmpDefault
 }
 
 //func serializeIgmpPacket(intfId uint32, onuId uint32, srcMac net.HardwareAddr, igmp *layers.IGMP) ([]byte, error) {
@@ -290,96 +291,96 @@
 	SourceAddresses         []net.IP
 	NumberOfGroupRecords    uint16
 	NumberOfSources         uint16
-        GroupRecords            []IGMPv3GroupRecord
+	GroupRecords            []IGMPv3GroupRecord
 	Version                 uint8 // IGMP protocol version
 }
 
 // IGMPv3GroupRecord stores individual group records for a V3 Membership Report message.
 type IGMPv3GroupRecord struct {
-       Type             IGMPv3GroupRecordType
-       AuxDataLen       uint8 // this should always be 0 as per IGMPv3 spec.
-       NumberOfSources  uint16
-       MulticastAddress net.IP
-       SourceAddresses  []net.IP
-       AuxData          uint32 // NOT USED
+	Type             IGMPv3GroupRecordType
+	AuxDataLen       uint8 // this should always be 0 as per IGMPv3 spec.
+	NumberOfSources  uint16
+	MulticastAddress net.IP
+	SourceAddresses  []net.IP
+	AuxData          uint32 // NOT USED
 }
 
 type IGMPv3GroupRecordType uint8
 
 const (
-       IGMPIsIn  IGMPv3GroupRecordType = 0x01 // Type MODE_IS_INCLUDE, source addresses x
-       IGMPIsEx  IGMPv3GroupRecordType = 0x02 // Type MODE_IS_EXCLUDE, source addresses x
-       IGMPToIn  IGMPv3GroupRecordType = 0x03 // Type CHANGE_TO_INCLUDE_MODE, source addresses x
-       IGMPToEx  IGMPv3GroupRecordType = 0x04 // Type CHANGE_TO_EXCLUDE_MODE, source addresses x
-       IGMPAllow IGMPv3GroupRecordType = 0x05 // Type ALLOW_NEW_SOURCES, source addresses x
-       IGMPBlock IGMPv3GroupRecordType = 0x06 // Type BLOCK_OLD_SOURCES, source addresses x
+	IGMPIsIn  IGMPv3GroupRecordType = 0x01 // Type MODE_IS_INCLUDE, source addresses x
+	IGMPIsEx  IGMPv3GroupRecordType = 0x02 // Type MODE_IS_EXCLUDE, source addresses x
+	IGMPToIn  IGMPv3GroupRecordType = 0x03 // Type CHANGE_TO_INCLUDE_MODE, source addresses x
+	IGMPToEx  IGMPv3GroupRecordType = 0x04 // Type CHANGE_TO_EXCLUDE_MODE, source addresses x
+	IGMPAllow IGMPv3GroupRecordType = 0x05 // Type ALLOW_NEW_SOURCES, source addresses x
+	IGMPBlock IGMPv3GroupRecordType = 0x06 // Type BLOCK_OLD_SOURCES, source addresses x
 )
 
 func (i IGMPv3GroupRecordType) String() string {
-       switch i {
-       case IGMPIsIn:
-               return "MODE_IS_INCLUDE"
-       case IGMPIsEx:
-               return "MODE_IS_EXCLUDE"
-       case IGMPToIn:
-               return "CHANGE_TO_INCLUDE_MODE"
-       case IGMPToEx:
-               return "CHANGE_TO_EXCLUDE_MODE"
-       case IGMPAllow:
-               return "ALLOW_NEW_SOURCES"
-       case IGMPBlock:
-               return "BLOCK_OLD_SOURCES"
-       default:
-               return ""
-       }
+	switch i {
+	case IGMPIsIn:
+		return "MODE_IS_INCLUDE"
+	case IGMPIsEx:
+		return "MODE_IS_EXCLUDE"
+	case IGMPToIn:
+		return "CHANGE_TO_INCLUDE_MODE"
+	case IGMPToEx:
+		return "CHANGE_TO_EXCLUDE_MODE"
+	case IGMPAllow:
+		return "ALLOW_NEW_SOURCES"
+	case IGMPBlock:
+		return "BLOCK_OLD_SOURCES"
+	default:
+		return ""
+	}
 }
 
 // SerializeTo writes the serialized form of this layer into the
 // SerializationBuffer, implementing gopacket.SerializableLayer.
 // See the docs for gopacket.SerializableLayer for more info.
 func (igmp IGMP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
-        log.Debugf("Serializing IGMP Packet")
+	log.Debugf("Serializing IGMP Packet")
 	data, err := b.PrependBytes(8915)
-        if err != nil {
-                return err
-        }
-        if igmp.Version == 2 {
-                data[0] = byte(igmp.Type)
-                data[1] = byte(igmp.MaxResponseTime)
-                data[2] = 0
-                data[3] = 0
-                copy(data[4:8], igmp.GroupAddress.To4())
-                if opts.ComputeChecksums {
-                        igmp.Checksum = tcpipChecksum(data, 0)
-                        binary.BigEndian.PutUint16(data[2:4], igmp.Checksum)
-                }
-        } else if igmp.Version ==3{
+	if err != nil {
+		return err
+	}
+	if igmp.Version == 2 {
+		data[0] = byte(igmp.Type)
+		data[1] = byte(igmp.MaxResponseTime)
+		data[2] = 0
+		data[3] = 0
+		copy(data[4:8], igmp.GroupAddress.To4())
+		if opts.ComputeChecksums {
+			igmp.Checksum = tcpipChecksum(data, 0)
+			binary.BigEndian.PutUint16(data[2:4], igmp.Checksum)
+		}
+	} else if igmp.Version == 3 {
 
-                data[0] = byte(igmp.Type)
-                data[1] = 0
-                data[2] = 0
-                data[3] = 0
-                data[4] = 0
-                data[5] = 0
-                binary.BigEndian.PutUint16(data[6:8], igmp.NumberOfGroupRecords)
-                j := 8
-                for i := uint16(0); i < igmp.NumberOfGroupRecords; i++ {
-                        data[j] = byte(igmp.GroupRecords[i].Type)
-                        data[j+1] = byte(0)
-                        binary.BigEndian.PutUint16(data[j+2:j+4], igmp.GroupRecords[i].NumberOfSources)
-                        copy(data[j+4:j+8], igmp.GroupRecords[i].MulticastAddress.To4())
-                        j=j+8
-                        for m := uint16(0); m < igmp.GroupRecords[i].NumberOfSources; m++ {
-                                copy(data[j:(j+4)], igmp.GroupRecords[i].SourceAddresses[m].To4())
-                                j=j+4
-                        }
-                }
-                if opts.ComputeChecksums {
-                        igmp.Checksum = tcpipChecksum(data, 0)
-                        binary.BigEndian.PutUint16(data[2:4], igmp.Checksum)
-                }
-        }
-        return nil
+		data[0] = byte(igmp.Type)
+		data[1] = 0
+		data[2] = 0
+		data[3] = 0
+		data[4] = 0
+		data[5] = 0
+		binary.BigEndian.PutUint16(data[6:8], igmp.NumberOfGroupRecords)
+		j := 8
+		for i := uint16(0); i < igmp.NumberOfGroupRecords; i++ {
+			data[j] = byte(igmp.GroupRecords[i].Type)
+			data[j+1] = byte(0)
+			binary.BigEndian.PutUint16(data[j+2:j+4], igmp.GroupRecords[i].NumberOfSources)
+			copy(data[j+4:j+8], igmp.GroupRecords[i].MulticastAddress.To4())
+			j = j + 8
+			for m := uint16(0); m < igmp.GroupRecords[i].NumberOfSources; m++ {
+				copy(data[j:(j+4)], igmp.GroupRecords[i].SourceAddresses[m].To4())
+				j = j + 4
+			}
+		}
+		if opts.ComputeChecksums {
+			igmp.Checksum = tcpipChecksum(data, 0)
+			binary.BigEndian.PutUint16(data[2:4], igmp.Checksum)
+		}
+	}
+	return nil
 }
 
 // Calculate the TCP/IP checksum defined in rfc1071.  The passed-in csum is any
diff --git a/internal/bbsimctl/commands/onu.go b/internal/bbsimctl/commands/onu.go
index fec47ed..9e41990 100644
--- a/internal/bbsimctl/commands/onu.go
+++ b/internal/bbsimctl/commands/onu.go
@@ -20,14 +20,17 @@
 import (
 	"context"
 	"fmt"
+	"os"
+	"strconv"
+	"strings"
+
 	"github.com/jessevdk/go-flags"
+	"github.com/olekukonko/tablewriter"
 	pb "github.com/opencord/bbsim/api/bbsim"
 	"github.com/opencord/bbsim/internal/bbsimctl/config"
 	"github.com/opencord/cordctl/pkg/format"
 	log "github.com/sirupsen/logrus"
 	"google.golang.org/grpc"
-	"os"
-	"strings"
 )
 
 const (
@@ -81,13 +84,20 @@
 }
 
 type ONUOptions struct {
-	List         ONUList         `command:"list"`
-	Get          ONUGet          `command:"get"`
-	ShutDown     ONUShutDown     `command:"shutdown"`
-	PowerOn      ONUPowerOn      `command:"poweron"`
-	RestartEapol ONUEapolRestart `command:"auth_restart"`
-	RestartDchp  ONUDhcpRestart  `command:"dhcp_restart"`
-	Igmp         ONUIgmp         `command:"igmp"`
+	List              ONUList              `command:"list"`
+	Get               ONUGet               `command:"get"`
+	ShutDown          ONUShutDown          `command:"shutdown"`
+	PowerOn           ONUPowerOn           `command:"poweron"`
+	RestartEapol      ONUEapolRestart      `command:"auth_restart"`
+	RestartDchp       ONUDhcpRestart       `command:"dhcp_restart"`
+	Igmp              ONUIgmp              `command:"igmp"`
+	TrafficSchedulers ONUTrafficSchedulers `command:"traffic_schedulers"`
+}
+
+type ONUTrafficSchedulers struct {
+	Args struct {
+		OnuSn OnuSnString
+	} `positional-args:"yes" required:"yes"`
 }
 
 func RegisterONUCommands(parser *flags.Parser) {
@@ -258,9 +268,9 @@
 		subActionVal = pb.SubActionTypes_JOIN
 	} else if string(options.Args.SubAction) == IgmpLeaveKey {
 		subActionVal = pb.SubActionTypes_LEAVE
-        } else if string(options.Args.SubAction) == IgmpJoinKeyV3 {
-                subActionVal = pb.SubActionTypes_JOINV3
-        }
+	} else if string(options.Args.SubAction) == IgmpJoinKeyV3 {
+		subActionVal = pb.SubActionTypes_JOINV3
+	}
 
 	igmpReq := pb.IgmpRequest{
 		OnuReq:       &req,
@@ -313,3 +323,86 @@
 
 	return list
 }
+
+func (options *ONUTrafficSchedulers) Execute(args []string) error {
+	client, conn := connect()
+	defer conn.Close()
+
+	ctx, cancel := context.WithTimeout(context.Background(), config.GlobalConfig.Grpc.Timeout)
+	defer cancel()
+	req := pb.ONURequest{
+		SerialNumber: string(options.Args.OnuSn),
+	}
+	res, err := client.GetOnuTrafficSchedulers(ctx, &req)
+	if err != nil {
+		log.Fatalf("Cannot get traffic schedulers for ONU %s: %v", options.Args.OnuSn, err)
+		return err
+	}
+
+	if res.TraffSchedulers == nil {
+		log.Fatalf("Cannot get traffic schedulers for ONU: %s (unavailable)", options.Args.OnuSn)
+		return nil
+	}
+
+	SchedulerHeader := []string{"Direction",
+		"AllocId",
+		"Scheduler.Direction",
+		"Scheduler.AdditionalBw",
+		"Scheduler.Priority",
+		"Scheduler.Weight",
+		"Scheduler.SchedPolicy",
+	}
+
+	ShapingInfoHeader := []string{"InferredAdditionBwIndication",
+		"Cbs",
+		"Cir",
+		"Gir",
+		"Pbs",
+		"Pir",
+	}
+
+	SchedulerVals := []string{}
+	ShapingInfoVals := []string{}
+	for _, v := range res.TraffSchedulers.TrafficScheds {
+		SchedulerVals = append(SchedulerVals,
+			v.GetDirection().String(),
+			strconv.Itoa(int(v.GetAllocId())),
+			v.Scheduler.GetDirection().String(),
+			v.Scheduler.GetAdditionalBw().String(),
+			strconv.Itoa(int(v.Scheduler.GetPriority())),
+			strconv.Itoa(int(v.Scheduler.GetWeight())),
+			v.GetScheduler().GetSchedPolicy().String(),
+		)
+
+		ShapingInfoVals = append(ShapingInfoVals,
+			v.TrafficShapingInfo.GetAddBwInd().String(),
+			strconv.Itoa(int(v.TrafficShapingInfo.GetCbs())),
+			strconv.Itoa(int(v.TrafficShapingInfo.GetCir())),
+			strconv.Itoa(int(v.TrafficShapingInfo.GetGir())),
+			strconv.Itoa(int(v.TrafficShapingInfo.GetPbs())),
+			strconv.Itoa(int(v.TrafficShapingInfo.GetPir())),
+		)
+	}
+
+	fmt.Fprintf(os.Stdout, "OnuId: %d \n", int(res.TraffSchedulers.OnuId))
+	fmt.Fprintf(os.Stdout, "IntfId: %d \n", int(res.TraffSchedulers.IntfId))
+	fmt.Fprintf(os.Stdout, "UniId: %d \n", int(res.TraffSchedulers.UniId))
+	fmt.Fprintf(os.Stdout, "OnuPortNo: %d \n", int(res.TraffSchedulers.PortNo))
+
+	tableSched := tablewriter.NewWriter(os.Stdout)
+	tableSched.SetRowLine(true)
+	fmt.Fprintf(os.Stdout, "Traffic Schedulers Info:\n")
+	tableSched.SetHeader(SchedulerHeader)
+	tableSched.Append(SchedulerVals)
+	tableSched.Render()
+	tableSched.SetNewLine("")
+
+	tableShap := tablewriter.NewWriter(os.Stdout)
+	tableShap.SetRowLine(true)
+	fmt.Fprintf(os.Stdout, "Traffic Shaping Info:\n")
+	tableShap.SetHeader(ShapingInfoHeader)
+	tableShap.Append(ShapingInfoVals)
+	tableShap.Render()
+
+	return nil
+}
diff --git a/internal/common/options.go b/internal/common/options.go
index 648c5cf..d5317e1 100644
--- a/internal/common/options.go
+++ b/internal/common/options.go
@@ -71,6 +71,7 @@
 	SadisRestAddress     string  `yaml:"sadis_rest_address"`
 	SadisServer          bool    `yaml:"sadis_server"`
 	ControlledActivation string  `yaml:"controlled_activation"`
+	EnablePerf           bool    `yaml:"enable_perf"`
 }
 
 type BBRConfig struct {
@@ -105,6 +106,7 @@
 			SadisRestAddress:     ":50074",
 			SadisServer:          true,
 			ControlledActivation: "default",
+			EnablePerf:           false,
 		},
 		OltConfig{
 			Vendor:             "BBSim",
@@ -145,7 +147,7 @@
 	return yamlConfig, nil
 }
 
-// GetBBSimOpts loads the BBSim configuration file and overides options with corresponding CLI flags if set
+// GetBBSimOpts loads the BBSim configuration file and over-rides options with corresponding CLI flags if set
 func GetBBSimOpts() *BBSimYamlConfig {
 	conf := Options
 
@@ -168,6 +170,7 @@
 	delay := flag.Int("delay", conf.BBSim.Delay, "The delay between ONU DISCOVERY batches in milliseconds (1 ONU per each PON PORT at a time")
 
 	controlledActivation := flag.String("ca", conf.BBSim.ControlledActivation, "Set the mode for controlled activation of PON ports and ONUs")
+	enablePerf := flag.Bool("enableperf", conf.BBSim.EnablePerf, "Setting this flag will cause BBSim to not store data like traffic schedulers, flows of ONUs etc..")
 	flag.Parse()
 
 	conf.Olt.ID = int(*olt_id)
@@ -183,6 +186,7 @@
 	conf.BBSim.EnableDhcp = *dhcp
 	conf.BBSim.Delay = *delay
 	conf.BBSim.ControlledActivation = *controlledActivation
+	conf.BBSim.EnablePerf = *enablePerf
 
 	// update device id if not set
 	if conf.Olt.DeviceId == "" {
diff --git a/vendor/github.com/mattn/go-runewidth/.travis.yml b/vendor/github.com/mattn/go-runewidth/.travis.yml
new file mode 100644
index 0000000..5c9c2a3
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/.travis.yml
@@ -0,0 +1,8 @@
+language: go
+go:
+  - tip
+before_install:
+  - go get github.com/mattn/goveralls
+  - go get golang.org/x/tools/cmd/cover
+script:
+    - $HOME/gopath/bin/goveralls -repotoken lAKAWPzcGsD3A8yBX3BGGtRUdJ6CaGERL
diff --git a/vendor/github.com/mattn/go-runewidth/LICENSE b/vendor/github.com/mattn/go-runewidth/LICENSE
new file mode 100644
index 0000000..91b5cef
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Yasuhiro Matsumoto
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vendor/github.com/mattn/go-runewidth/README.mkd b/vendor/github.com/mattn/go-runewidth/README.mkd
new file mode 100644
index 0000000..66663a9
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/README.mkd
@@ -0,0 +1,27 @@
+go-runewidth
+============
+
+[![Build Status](https://travis-ci.org/mattn/go-runewidth.png?branch=master)](https://travis-ci.org/mattn/go-runewidth)
+[![Coverage Status](https://coveralls.io/repos/mattn/go-runewidth/badge.png?branch=HEAD)](https://coveralls.io/r/mattn/go-runewidth?branch=HEAD)
+[![GoDoc](https://godoc.org/github.com/mattn/go-runewidth?status.svg)](http://godoc.org/github.com/mattn/go-runewidth)
+[![Go Report Card](https://goreportcard.com/badge/github.com/mattn/go-runewidth)](https://goreportcard.com/report/github.com/mattn/go-runewidth)
+
+Provides functions to get fixed width of the character or string.
+
+Usage
+-----
+
+```go
+runewidth.StringWidth("つのだ☆HIRO") == 12
+```
+
+
+Author
+------
+
+Yasuhiro Matsumoto
+
+License
+-------
+
+under the MIT License: http://mattn.mit-license.org/2013
diff --git a/vendor/github.com/mattn/go-runewidth/go.mod b/vendor/github.com/mattn/go-runewidth/go.mod
new file mode 100644
index 0000000..fa7f4d8
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/go.mod
@@ -0,0 +1,3 @@
+module github.com/mattn/go-runewidth
+
+go 1.9
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth.go b/vendor/github.com/mattn/go-runewidth/runewidth.go
new file mode 100644
index 0000000..8d64da0
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/runewidth.go
@@ -0,0 +1,258 @@
+package runewidth
+
+import (
+	"os"
+)
+
+//go:generate go run script/generate.go
+
+var (
+	// EastAsianWidth will be set true if the current locale is CJK
+	EastAsianWidth bool
+
+	// ZeroWidthJoiner is flag to set to use UTR#51 ZWJ
+	ZeroWidthJoiner bool
+
+	// DefaultCondition is a condition in current locale
+	DefaultCondition = &Condition{}
+)
+
+func init() {
+	handleEnv()
+}
+
+func handleEnv() {
+	env := os.Getenv("RUNEWIDTH_EASTASIAN")
+	if env == "" {
+		EastAsianWidth = IsEastAsian()
+	} else {
+		EastAsianWidth = env == "1"
+	}
+	// update DefaultCondition
+	DefaultCondition.EastAsianWidth = EastAsianWidth
+	DefaultCondition.ZeroWidthJoiner = ZeroWidthJoiner
+}
+
+type interval struct {
+	first rune
+	last  rune
+}
+
+type table []interval
+
+func inTables(r rune, ts ...table) bool {
+	for _, t := range ts {
+		if inTable(r, t) {
+			return true
+		}
+	}
+	return false
+}
+
+func inTable(r rune, t table) bool {
+	// func (t table) IncludesRune(r rune) bool {
+	if r < t[0].first {
+		return false
+	}
+
+	bot := 0
+	top := len(t) - 1
+	for top >= bot {
+		mid := (bot + top) >> 1
+
+		switch {
+		case t[mid].last < r:
+			bot = mid + 1
+		case t[mid].first > r:
+			top = mid - 1
+		default:
+			return true
+		}
+	}
+
+	return false
+}
+
+var private = table{
+	{0x00E000, 0x00F8FF}, {0x0F0000, 0x0FFFFD}, {0x100000, 0x10FFFD},
+}
+
+var nonprint = table{
+	{0x0000, 0x001F}, {0x007F, 0x009F}, {0x00AD, 0x00AD},
+	{0x070F, 0x070F}, {0x180B, 0x180E}, {0x200B, 0x200F},
+	{0x2028, 0x202E}, {0x206A, 0x206F}, {0xD800, 0xDFFF},
+	{0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFB}, {0xFFFE, 0xFFFF},
+}
+
+// Condition have flag EastAsianWidth whether the current locale is CJK or not.
+type Condition struct {
+	EastAsianWidth  bool
+	ZeroWidthJoiner bool
+}
+
+// NewCondition return new instance of Condition which is current locale.
+func NewCondition() *Condition {
+	return &Condition{
+		EastAsianWidth:  EastAsianWidth,
+		ZeroWidthJoiner: ZeroWidthJoiner,
+	}
+}
+
+// RuneWidth returns the number of cells in r.
+// See http://www.unicode.org/reports/tr11/
+func (c *Condition) RuneWidth(r rune) int {
+	switch {
+	case r < 0 || r > 0x10FFFF || inTables(r, nonprint, combining, notassigned):
+		return 0
+	case (c.EastAsianWidth && IsAmbiguousWidth(r)) || inTables(r, doublewidth):
+		return 2
+	default:
+		return 1
+	}
+}
+
+func (c *Condition) stringWidth(s string) (width int) {
+	for _, r := range []rune(s) {
+		width += c.RuneWidth(r)
+	}
+	return width
+}
+
+func (c *Condition) stringWidthZeroJoiner(s string) (width int) {
+	r1, r2 := rune(0), rune(0)
+	for _, r := range []rune(s) {
+		if r == 0xFE0E || r == 0xFE0F {
+			continue
+		}
+		w := c.RuneWidth(r)
+		if r2 == 0x200D && inTables(r, emoji) && inTables(r1, emoji) {
+			if width < w {
+				width = w
+			}
+		} else {
+			width += w
+		}
+		r1, r2 = r2, r
+	}
+	return width
+}
+
+// StringWidth return width as you can see
+func (c *Condition) StringWidth(s string) (width int) {
+	if c.ZeroWidthJoiner {
+		return c.stringWidthZeroJoiner(s)
+	}
+	return c.stringWidth(s)
+}
+
+// Truncate return string truncated with w cells
+func (c *Condition) Truncate(s string, w int, tail string) string {
+	if c.StringWidth(s) <= w {
+		return s
+	}
+	r := []rune(s)
+	tw := c.StringWidth(tail)
+	w -= tw
+	width := 0
+	i := 0
+	for ; i < len(r); i++ {
+		cw := c.RuneWidth(r[i])
+		if width+cw > w {
+			break
+		}
+		width += cw
+	}
+	return string(r[0:i]) + tail
+}
+
+// Wrap return string wrapped with w cells
+func (c *Condition) Wrap(s string, w int) string {
+	width := 0
+	out := ""
+	for _, r := range []rune(s) {
+		cw := RuneWidth(r)
+		if r == '\n' {
+			out += string(r)
+			width = 0
+			continue
+		} else if width+cw > w {
+			out += "\n"
+			width = 0
+			out += string(r)
+			width += cw
+			continue
+		}
+		out += string(r)
+		width += cw
+	}
+	return out
+}
+
+// FillLeft return string filled in left by spaces in w cells
+func (c *Condition) FillLeft(s string, w int) string {
+	width := c.StringWidth(s)
+	count := w - width
+	if count > 0 {
+		b := make([]byte, count)
+		for i := range b {
+			b[i] = ' '
+		}
+		return string(b) + s
+	}
+	return s
+}
+
+// FillRight return string filled in left by spaces in w cells
+func (c *Condition) FillRight(s string, w int) string {
+	width := c.StringWidth(s)
+	count := w - width
+	if count > 0 {
+		b := make([]byte, count)
+		for i := range b {
+			b[i] = ' '
+		}
+		return s + string(b)
+	}
+	return s
+}
+
+// RuneWidth returns the number of cells in r.
+// See http://www.unicode.org/reports/tr11/
+func RuneWidth(r rune) int {
+	return DefaultCondition.RuneWidth(r)
+}
+
+// IsAmbiguousWidth returns whether is ambiguous width or not.
+func IsAmbiguousWidth(r rune) bool {
+	return inTables(r, private, ambiguous)
+}
+
+// IsNeutralWidth returns whether is neutral width or not.
+func IsNeutralWidth(r rune) bool {
+	return inTable(r, neutral)
+}
+
+// StringWidth return width as you can see
+func StringWidth(s string) (width int) {
+	return DefaultCondition.StringWidth(s)
+}
+
+// Truncate return string truncated with w cells
+func Truncate(s string, w int, tail string) string {
+	return DefaultCondition.Truncate(s, w, tail)
+}
+
+// Wrap return string wrapped with w cells
+func Wrap(s string, w int) string {
+	return DefaultCondition.Wrap(s, w)
+}
+
+// FillLeft return string filled in left by spaces in w cells
+func FillLeft(s string, w int) string {
+	return DefaultCondition.FillLeft(s, w)
+}
+
+// FillRight return string filled in left by spaces in w cells
+func FillRight(s string, w int) string {
+	return DefaultCondition.FillRight(s, w)
+}
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_appengine.go b/vendor/github.com/mattn/go-runewidth/runewidth_appengine.go
new file mode 100644
index 0000000..7d99f6e
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_appengine.go
@@ -0,0 +1,8 @@
+// +build appengine
+
+package runewidth
+
+// IsEastAsian return true if the current locale is CJK
+func IsEastAsian() bool {
+	return false
+}
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_js.go b/vendor/github.com/mattn/go-runewidth/runewidth_js.go
new file mode 100644
index 0000000..c5fdf40
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_js.go
@@ -0,0 +1,9 @@
+// +build js
+// +build !appengine
+
+package runewidth
+
+func IsEastAsian() bool {
+	// TODO: Implement this for the web. Detect east asian in a compatible way, and return true.
+	return false
+}
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_posix.go b/vendor/github.com/mattn/go-runewidth/runewidth_posix.go
new file mode 100644
index 0000000..66a58b5
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_posix.go
@@ -0,0 +1,79 @@
+// +build !windows
+// +build !js
+// +build !appengine
+
+package runewidth
+
+import (
+	"os"
+	"regexp"
+	"strings"
+)
+
+var reLoc = regexp.MustCompile(`^[a-z][a-z][a-z]?(?:_[A-Z][A-Z])?\.(.+)`)
+
+var mblenTable = map[string]int{
+	"utf-8":   6,
+	"utf8":    6,
+	"jis":     8,
+	"eucjp":   3,
+	"euckr":   2,
+	"euccn":   2,
+	"sjis":    2,
+	"cp932":   2,
+	"cp51932": 2,
+	"cp936":   2,
+	"cp949":   2,
+	"cp950":   2,
+	"big5":    2,
+	"gbk":     2,
+	"gb2312":  2,
+}
+
+func isEastAsian(locale string) bool {
+	charset := strings.ToLower(locale)
+	r := reLoc.FindStringSubmatch(locale)
+	if len(r) == 2 {
+		charset = strings.ToLower(r[1])
+	}
+
+	if strings.HasSuffix(charset, "@cjk_narrow") {
+		return false
+	}
+
+	for pos, b := range []byte(charset) {
+		if b == '@' {
+			charset = charset[:pos]
+			break
+		}
+	}
+	max := 1
+	if m, ok := mblenTable[charset]; ok {
+		max = m
+	}
+	if max > 1 && (charset[0] != 'u' ||
+		strings.HasPrefix(locale, "ja") ||
+		strings.HasPrefix(locale, "ko") ||
+		strings.HasPrefix(locale, "zh")) {
+		return true
+	}
+	return false
+}
+
+// IsEastAsian return true if the current locale is CJK
+func IsEastAsian() bool {
+	locale := os.Getenv("LC_CTYPE")
+	if locale == "" {
+		locale = os.Getenv("LANG")
+	}
+
+	// ignore C locale
+	if locale == "POSIX" || locale == "C" {
+		return false
+	}
+	if len(locale) > 1 && locale[0] == 'C' && (locale[1] == '.' || locale[1] == '-') {
+		return false
+	}
+
+	return isEastAsian(locale)
+}
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_table.go b/vendor/github.com/mattn/go-runewidth/runewidth_table.go
new file mode 100644
index 0000000..9ca6d0e
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_table.go
@@ -0,0 +1,427 @@
+package runewidth
+
+var combining = table{
+	{0x0300, 0x036F}, {0x0483, 0x0489}, {0x07EB, 0x07F3},
+	{0x0C00, 0x0C00}, {0x0C04, 0x0C04}, {0x0D00, 0x0D01},
+	{0x135D, 0x135F}, {0x1A7F, 0x1A7F}, {0x1AB0, 0x1ABE},
+	{0x1B6B, 0x1B73}, {0x1DC0, 0x1DF9}, {0x1DFB, 0x1DFF},
+	{0x20D0, 0x20F0}, {0x2CEF, 0x2CF1}, {0x2DE0, 0x2DFF},
+	{0x3099, 0x309A}, {0xA66F, 0xA672}, {0xA674, 0xA67D},
+	{0xA69E, 0xA69F}, {0xA6F0, 0xA6F1}, {0xA8E0, 0xA8F1},
+	{0xFE20, 0xFE2F}, {0x101FD, 0x101FD}, {0x10376, 0x1037A},
+	{0x10F46, 0x10F50}, {0x11300, 0x11301}, {0x1133B, 0x1133C},
+	{0x11366, 0x1136C}, {0x11370, 0x11374}, {0x16AF0, 0x16AF4},
+	{0x1D165, 0x1D169}, {0x1D16D, 0x1D172}, {0x1D17B, 0x1D182},
+	{0x1D185, 0x1D18B}, {0x1D1AA, 0x1D1AD}, {0x1D242, 0x1D244},
+	{0x1E000, 0x1E006}, {0x1E008, 0x1E018}, {0x1E01B, 0x1E021},
+	{0x1E023, 0x1E024}, {0x1E026, 0x1E02A}, {0x1E8D0, 0x1E8D6},
+}
+
+var doublewidth = table{
+	{0x1100, 0x115F}, {0x231A, 0x231B}, {0x2329, 0x232A},
+	{0x23E9, 0x23EC}, {0x23F0, 0x23F0}, {0x23F3, 0x23F3},
+	{0x25FD, 0x25FE}, {0x2614, 0x2615}, {0x2648, 0x2653},
+	{0x267F, 0x267F}, {0x2693, 0x2693}, {0x26A1, 0x26A1},
+	{0x26AA, 0x26AB}, {0x26BD, 0x26BE}, {0x26C4, 0x26C5},
+	{0x26CE, 0x26CE}, {0x26D4, 0x26D4}, {0x26EA, 0x26EA},
+	{0x26F2, 0x26F3}, {0x26F5, 0x26F5}, {0x26FA, 0x26FA},
+	{0x26FD, 0x26FD}, {0x2705, 0x2705}, {0x270A, 0x270B},
+	{0x2728, 0x2728}, {0x274C, 0x274C}, {0x274E, 0x274E},
+	{0x2753, 0x2755}, {0x2757, 0x2757}, {0x2795, 0x2797},
+	{0x27B0, 0x27B0}, {0x27BF, 0x27BF}, {0x2B1B, 0x2B1C},
+	{0x2B50, 0x2B50}, {0x2B55, 0x2B55}, {0x2E80, 0x2E99},
+	{0x2E9B, 0x2EF3}, {0x2F00, 0x2FD5}, {0x2FF0, 0x2FFB},
+	{0x3000, 0x303E}, {0x3041, 0x3096}, {0x3099, 0x30FF},
+	{0x3105, 0x312F}, {0x3131, 0x318E}, {0x3190, 0x31BA},
+	{0x31C0, 0x31E3}, {0x31F0, 0x321E}, {0x3220, 0x3247},
+	{0x3250, 0x4DBF}, {0x4E00, 0xA48C}, {0xA490, 0xA4C6},
+	{0xA960, 0xA97C}, {0xAC00, 0xD7A3}, {0xF900, 0xFAFF},
+	{0xFE10, 0xFE19}, {0xFE30, 0xFE52}, {0xFE54, 0xFE66},
+	{0xFE68, 0xFE6B}, {0xFF01, 0xFF60}, {0xFFE0, 0xFFE6},
+	{0x16FE0, 0x16FE3}, {0x17000, 0x187F7}, {0x18800, 0x18AF2},
+	{0x1B000, 0x1B11E}, {0x1B150, 0x1B152}, {0x1B164, 0x1B167},
+	{0x1B170, 0x1B2FB}, {0x1F004, 0x1F004}, {0x1F0CF, 0x1F0CF},
+	{0x1F18E, 0x1F18E}, {0x1F191, 0x1F19A}, {0x1F200, 0x1F202},
+	{0x1F210, 0x1F23B}, {0x1F240, 0x1F248}, {0x1F250, 0x1F251},
+	{0x1F260, 0x1F265}, {0x1F300, 0x1F320}, {0x1F32D, 0x1F335},
+	{0x1F337, 0x1F37C}, {0x1F37E, 0x1F393}, {0x1F3A0, 0x1F3CA},
+	{0x1F3CF, 0x1F3D3}, {0x1F3E0, 0x1F3F0}, {0x1F3F4, 0x1F3F4},
+	{0x1F3F8, 0x1F43E}, {0x1F440, 0x1F440}, {0x1F442, 0x1F4FC},
+	{0x1F4FF, 0x1F53D}, {0x1F54B, 0x1F54E}, {0x1F550, 0x1F567},
+	{0x1F57A, 0x1F57A}, {0x1F595, 0x1F596}, {0x1F5A4, 0x1F5A4},
+	{0x1F5FB, 0x1F64F}, {0x1F680, 0x1F6C5}, {0x1F6CC, 0x1F6CC},
+	{0x1F6D0, 0x1F6D2}, {0x1F6D5, 0x1F6D5}, {0x1F6EB, 0x1F6EC},
+	{0x1F6F4, 0x1F6FA}, {0x1F7E0, 0x1F7EB}, {0x1F90D, 0x1F971},
+	{0x1F973, 0x1F976}, {0x1F97A, 0x1F9A2}, {0x1F9A5, 0x1F9AA},
+	{0x1F9AE, 0x1F9CA}, {0x1F9CD, 0x1F9FF}, {0x1FA70, 0x1FA73},
+	{0x1FA78, 0x1FA7A}, {0x1FA80, 0x1FA82}, {0x1FA90, 0x1FA95},
+	{0x20000, 0x2FFFD}, {0x30000, 0x3FFFD},
+}
+
+var ambiguous = table{
+	{0x00A1, 0x00A1}, {0x00A4, 0x00A4}, {0x00A7, 0x00A8},
+	{0x00AA, 0x00AA}, {0x00AD, 0x00AE}, {0x00B0, 0x00B4},
+	{0x00B6, 0x00BA}, {0x00BC, 0x00BF}, {0x00C6, 0x00C6},
+	{0x00D0, 0x00D0}, {0x00D7, 0x00D8}, {0x00DE, 0x00E1},
+	{0x00E6, 0x00E6}, {0x00E8, 0x00EA}, {0x00EC, 0x00ED},
+	{0x00F0, 0x00F0}, {0x00F2, 0x00F3}, {0x00F7, 0x00FA},
+	{0x00FC, 0x00FC}, {0x00FE, 0x00FE}, {0x0101, 0x0101},
+	{0x0111, 0x0111}, {0x0113, 0x0113}, {0x011B, 0x011B},
+	{0x0126, 0x0127}, {0x012B, 0x012B}, {0x0131, 0x0133},
+	{0x0138, 0x0138}, {0x013F, 0x0142}, {0x0144, 0x0144},
+	{0x0148, 0x014B}, {0x014D, 0x014D}, {0x0152, 0x0153},
+	{0x0166, 0x0167}, {0x016B, 0x016B}, {0x01CE, 0x01CE},
+	{0x01D0, 0x01D0}, {0x01D2, 0x01D2}, {0x01D4, 0x01D4},
+	{0x01D6, 0x01D6}, {0x01D8, 0x01D8}, {0x01DA, 0x01DA},
+	{0x01DC, 0x01DC}, {0x0251, 0x0251}, {0x0261, 0x0261},
+	{0x02C4, 0x02C4}, {0x02C7, 0x02C7}, {0x02C9, 0x02CB},
+	{0x02CD, 0x02CD}, {0x02D0, 0x02D0}, {0x02D8, 0x02DB},
+	{0x02DD, 0x02DD}, {0x02DF, 0x02DF}, {0x0300, 0x036F},
+	{0x0391, 0x03A1}, {0x03A3, 0x03A9}, {0x03B1, 0x03C1},
+	{0x03C3, 0x03C9}, {0x0401, 0x0401}, {0x0410, 0x044F},
+	{0x0451, 0x0451}, {0x2010, 0x2010}, {0x2013, 0x2016},
+	{0x2018, 0x2019}, {0x201C, 0x201D}, {0x2020, 0x2022},
+	{0x2024, 0x2027}, {0x2030, 0x2030}, {0x2032, 0x2033},
+	{0x2035, 0x2035}, {0x203B, 0x203B}, {0x203E, 0x203E},
+	{0x2074, 0x2074}, {0x207F, 0x207F}, {0x2081, 0x2084},
+	{0x20AC, 0x20AC}, {0x2103, 0x2103}, {0x2105, 0x2105},
+	{0x2109, 0x2109}, {0x2113, 0x2113}, {0x2116, 0x2116},
+	{0x2121, 0x2122}, {0x2126, 0x2126}, {0x212B, 0x212B},
+	{0x2153, 0x2154}, {0x215B, 0x215E}, {0x2160, 0x216B},
+	{0x2170, 0x2179}, {0x2189, 0x2189}, {0x2190, 0x2199},
+	{0x21B8, 0x21B9}, {0x21D2, 0x21D2}, {0x21D4, 0x21D4},
+	{0x21E7, 0x21E7}, {0x2200, 0x2200}, {0x2202, 0x2203},
+	{0x2207, 0x2208}, {0x220B, 0x220B}, {0x220F, 0x220F},
+	{0x2211, 0x2211}, {0x2215, 0x2215}, {0x221A, 0x221A},
+	{0x221D, 0x2220}, {0x2223, 0x2223}, {0x2225, 0x2225},
+	{0x2227, 0x222C}, {0x222E, 0x222E}, {0x2234, 0x2237},
+	{0x223C, 0x223D}, {0x2248, 0x2248}, {0x224C, 0x224C},
+	{0x2252, 0x2252}, {0x2260, 0x2261}, {0x2264, 0x2267},
+	{0x226A, 0x226B}, {0x226E, 0x226F}, {0x2282, 0x2283},
+	{0x2286, 0x2287}, {0x2295, 0x2295}, {0x2299, 0x2299},
+	{0x22A5, 0x22A5}, {0x22BF, 0x22BF}, {0x2312, 0x2312},
+	{0x2460, 0x24E9}, {0x24EB, 0x254B}, {0x2550, 0x2573},
+	{0x2580, 0x258F}, {0x2592, 0x2595}, {0x25A0, 0x25A1},
+	{0x25A3, 0x25A9}, {0x25B2, 0x25B3}, {0x25B6, 0x25B7},
+	{0x25BC, 0x25BD}, {0x25C0, 0x25C1}, {0x25C6, 0x25C8},
+	{0x25CB, 0x25CB}, {0x25CE, 0x25D1}, {0x25E2, 0x25E5},
+	{0x25EF, 0x25EF}, {0x2605, 0x2606}, {0x2609, 0x2609},
+	{0x260E, 0x260F}, {0x261C, 0x261C}, {0x261E, 0x261E},
+	{0x2640, 0x2640}, {0x2642, 0x2642}, {0x2660, 0x2661},
+	{0x2663, 0x2665}, {0x2667, 0x266A}, {0x266C, 0x266D},
+	{0x266F, 0x266F}, {0x269E, 0x269F}, {0x26BF, 0x26BF},
+	{0x26C6, 0x26CD}, {0x26CF, 0x26D3}, {0x26D5, 0x26E1},
+	{0x26E3, 0x26E3}, {0x26E8, 0x26E9}, {0x26EB, 0x26F1},
+	{0x26F4, 0x26F4}, {0x26F6, 0x26F9}, {0x26FB, 0x26FC},
+	{0x26FE, 0x26FF}, {0x273D, 0x273D}, {0x2776, 0x277F},
+	{0x2B56, 0x2B59}, {0x3248, 0x324F}, {0xE000, 0xF8FF},
+	{0xFE00, 0xFE0F}, {0xFFFD, 0xFFFD}, {0x1F100, 0x1F10A},
+	{0x1F110, 0x1F12D}, {0x1F130, 0x1F169}, {0x1F170, 0x1F18D},
+	{0x1F18F, 0x1F190}, {0x1F19B, 0x1F1AC}, {0xE0100, 0xE01EF},
+	{0xF0000, 0xFFFFD}, {0x100000, 0x10FFFD},
+}
+var notassigned = table{
+	{0x27E6, 0x27ED}, {0x2985, 0x2986},
+}
+
+var neutral = table{
+	{0x0000, 0x001F}, {0x007F, 0x00A0}, {0x00A9, 0x00A9},
+	{0x00AB, 0x00AB}, {0x00B5, 0x00B5}, {0x00BB, 0x00BB},
+	{0x00C0, 0x00C5}, {0x00C7, 0x00CF}, {0x00D1, 0x00D6},
+	{0x00D9, 0x00DD}, {0x00E2, 0x00E5}, {0x00E7, 0x00E7},
+	{0x00EB, 0x00EB}, {0x00EE, 0x00EF}, {0x00F1, 0x00F1},
+	{0x00F4, 0x00F6}, {0x00FB, 0x00FB}, {0x00FD, 0x00FD},
+	{0x00FF, 0x0100}, {0x0102, 0x0110}, {0x0112, 0x0112},
+	{0x0114, 0x011A}, {0x011C, 0x0125}, {0x0128, 0x012A},
+	{0x012C, 0x0130}, {0x0134, 0x0137}, {0x0139, 0x013E},
+	{0x0143, 0x0143}, {0x0145, 0x0147}, {0x014C, 0x014C},
+	{0x014E, 0x0151}, {0x0154, 0x0165}, {0x0168, 0x016A},
+	{0x016C, 0x01CD}, {0x01CF, 0x01CF}, {0x01D1, 0x01D1},
+	{0x01D3, 0x01D3}, {0x01D5, 0x01D5}, {0x01D7, 0x01D7},
+	{0x01D9, 0x01D9}, {0x01DB, 0x01DB}, {0x01DD, 0x0250},
+	{0x0252, 0x0260}, {0x0262, 0x02C3}, {0x02C5, 0x02C6},
+	{0x02C8, 0x02C8}, {0x02CC, 0x02CC}, {0x02CE, 0x02CF},
+	{0x02D1, 0x02D7}, {0x02DC, 0x02DC}, {0x02DE, 0x02DE},
+	{0x02E0, 0x02FF}, {0x0370, 0x0377}, {0x037A, 0x037F},
+	{0x0384, 0x038A}, {0x038C, 0x038C}, {0x038E, 0x0390},
+	{0x03AA, 0x03B0}, {0x03C2, 0x03C2}, {0x03CA, 0x0400},
+	{0x0402, 0x040F}, {0x0450, 0x0450}, {0x0452, 0x052F},
+	{0x0531, 0x0556}, {0x0559, 0x058A}, {0x058D, 0x058F},
+	{0x0591, 0x05C7}, {0x05D0, 0x05EA}, {0x05EF, 0x05F4},
+	{0x0600, 0x061C}, {0x061E, 0x070D}, {0x070F, 0x074A},
+	{0x074D, 0x07B1}, {0x07C0, 0x07FA}, {0x07FD, 0x082D},
+	{0x0830, 0x083E}, {0x0840, 0x085B}, {0x085E, 0x085E},
+	{0x0860, 0x086A}, {0x08A0, 0x08B4}, {0x08B6, 0x08BD},
+	{0x08D3, 0x0983}, {0x0985, 0x098C}, {0x098F, 0x0990},
+	{0x0993, 0x09A8}, {0x09AA, 0x09B0}, {0x09B2, 0x09B2},
+	{0x09B6, 0x09B9}, {0x09BC, 0x09C4}, {0x09C7, 0x09C8},
+	{0x09CB, 0x09CE}, {0x09D7, 0x09D7}, {0x09DC, 0x09DD},
+	{0x09DF, 0x09E3}, {0x09E6, 0x09FE}, {0x0A01, 0x0A03},
+	{0x0A05, 0x0A0A}, {0x0A0F, 0x0A10}, {0x0A13, 0x0A28},
+	{0x0A2A, 0x0A30}, {0x0A32, 0x0A33}, {0x0A35, 0x0A36},
+	{0x0A38, 0x0A39}, {0x0A3C, 0x0A3C}, {0x0A3E, 0x0A42},
+	{0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, {0x0A51, 0x0A51},
+	{0x0A59, 0x0A5C}, {0x0A5E, 0x0A5E}, {0x0A66, 0x0A76},
+	{0x0A81, 0x0A83}, {0x0A85, 0x0A8D}, {0x0A8F, 0x0A91},
+	{0x0A93, 0x0AA8}, {0x0AAA, 0x0AB0}, {0x0AB2, 0x0AB3},
+	{0x0AB5, 0x0AB9}, {0x0ABC, 0x0AC5}, {0x0AC7, 0x0AC9},
+	{0x0ACB, 0x0ACD}, {0x0AD0, 0x0AD0}, {0x0AE0, 0x0AE3},
+	{0x0AE6, 0x0AF1}, {0x0AF9, 0x0AFF}, {0x0B01, 0x0B03},
+	{0x0B05, 0x0B0C}, {0x0B0F, 0x0B10}, {0x0B13, 0x0B28},
+	{0x0B2A, 0x0B30}, {0x0B32, 0x0B33}, {0x0B35, 0x0B39},
+	{0x0B3C, 0x0B44}, {0x0B47, 0x0B48}, {0x0B4B, 0x0B4D},
+	{0x0B56, 0x0B57}, {0x0B5C, 0x0B5D}, {0x0B5F, 0x0B63},
+	{0x0B66, 0x0B77}, {0x0B82, 0x0B83}, {0x0B85, 0x0B8A},
+	{0x0B8E, 0x0B90}, {0x0B92, 0x0B95}, {0x0B99, 0x0B9A},
+	{0x0B9C, 0x0B9C}, {0x0B9E, 0x0B9F}, {0x0BA3, 0x0BA4},
+	{0x0BA8, 0x0BAA}, {0x0BAE, 0x0BB9}, {0x0BBE, 0x0BC2},
+	{0x0BC6, 0x0BC8}, {0x0BCA, 0x0BCD}, {0x0BD0, 0x0BD0},
+	{0x0BD7, 0x0BD7}, {0x0BE6, 0x0BFA}, {0x0C00, 0x0C0C},
+	{0x0C0E, 0x0C10}, {0x0C12, 0x0C28}, {0x0C2A, 0x0C39},
+	{0x0C3D, 0x0C44}, {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D},
+	{0x0C55, 0x0C56}, {0x0C58, 0x0C5A}, {0x0C60, 0x0C63},
+	{0x0C66, 0x0C6F}, {0x0C77, 0x0C8C}, {0x0C8E, 0x0C90},
+	{0x0C92, 0x0CA8}, {0x0CAA, 0x0CB3}, {0x0CB5, 0x0CB9},
+	{0x0CBC, 0x0CC4}, {0x0CC6, 0x0CC8}, {0x0CCA, 0x0CCD},
+	{0x0CD5, 0x0CD6}, {0x0CDE, 0x0CDE}, {0x0CE0, 0x0CE3},
+	{0x0CE6, 0x0CEF}, {0x0CF1, 0x0CF2}, {0x0D00, 0x0D03},
+	{0x0D05, 0x0D0C}, {0x0D0E, 0x0D10}, {0x0D12, 0x0D44},
+	{0x0D46, 0x0D48}, {0x0D4A, 0x0D4F}, {0x0D54, 0x0D63},
+	{0x0D66, 0x0D7F}, {0x0D82, 0x0D83}, {0x0D85, 0x0D96},
+	{0x0D9A, 0x0DB1}, {0x0DB3, 0x0DBB}, {0x0DBD, 0x0DBD},
+	{0x0DC0, 0x0DC6}, {0x0DCA, 0x0DCA}, {0x0DCF, 0x0DD4},
+	{0x0DD6, 0x0DD6}, {0x0DD8, 0x0DDF}, {0x0DE6, 0x0DEF},
+	{0x0DF2, 0x0DF4}, {0x0E01, 0x0E3A}, {0x0E3F, 0x0E5B},
+	{0x0E81, 0x0E82}, {0x0E84, 0x0E84}, {0x0E86, 0x0E8A},
+	{0x0E8C, 0x0EA3}, {0x0EA5, 0x0EA5}, {0x0EA7, 0x0EBD},
+	{0x0EC0, 0x0EC4}, {0x0EC6, 0x0EC6}, {0x0EC8, 0x0ECD},
+	{0x0ED0, 0x0ED9}, {0x0EDC, 0x0EDF}, {0x0F00, 0x0F47},
+	{0x0F49, 0x0F6C}, {0x0F71, 0x0F97}, {0x0F99, 0x0FBC},
+	{0x0FBE, 0x0FCC}, {0x0FCE, 0x0FDA}, {0x1000, 0x10C5},
+	{0x10C7, 0x10C7}, {0x10CD, 0x10CD}, {0x10D0, 0x10FF},
+	{0x1160, 0x1248}, {0x124A, 0x124D}, {0x1250, 0x1256},
+	{0x1258, 0x1258}, {0x125A, 0x125D}, {0x1260, 0x1288},
+	{0x128A, 0x128D}, {0x1290, 0x12B0}, {0x12B2, 0x12B5},
+	{0x12B8, 0x12BE}, {0x12C0, 0x12C0}, {0x12C2, 0x12C5},
+	{0x12C8, 0x12D6}, {0x12D8, 0x1310}, {0x1312, 0x1315},
+	{0x1318, 0x135A}, {0x135D, 0x137C}, {0x1380, 0x1399},
+	{0x13A0, 0x13F5}, {0x13F8, 0x13FD}, {0x1400, 0x169C},
+	{0x16A0, 0x16F8}, {0x1700, 0x170C}, {0x170E, 0x1714},
+	{0x1720, 0x1736}, {0x1740, 0x1753}, {0x1760, 0x176C},
+	{0x176E, 0x1770}, {0x1772, 0x1773}, {0x1780, 0x17DD},
+	{0x17E0, 0x17E9}, {0x17F0, 0x17F9}, {0x1800, 0x180E},
+	{0x1810, 0x1819}, {0x1820, 0x1878}, {0x1880, 0x18AA},
+	{0x18B0, 0x18F5}, {0x1900, 0x191E}, {0x1920, 0x192B},
+	{0x1930, 0x193B}, {0x1940, 0x1940}, {0x1944, 0x196D},
+	{0x1970, 0x1974}, {0x1980, 0x19AB}, {0x19B0, 0x19C9},
+	{0x19D0, 0x19DA}, {0x19DE, 0x1A1B}, {0x1A1E, 0x1A5E},
+	{0x1A60, 0x1A7C}, {0x1A7F, 0x1A89}, {0x1A90, 0x1A99},
+	{0x1AA0, 0x1AAD}, {0x1AB0, 0x1ABE}, {0x1B00, 0x1B4B},
+	{0x1B50, 0x1B7C}, {0x1B80, 0x1BF3}, {0x1BFC, 0x1C37},
+	{0x1C3B, 0x1C49}, {0x1C4D, 0x1C88}, {0x1C90, 0x1CBA},
+	{0x1CBD, 0x1CC7}, {0x1CD0, 0x1CFA}, {0x1D00, 0x1DF9},
+	{0x1DFB, 0x1F15}, {0x1F18, 0x1F1D}, {0x1F20, 0x1F45},
+	{0x1F48, 0x1F4D}, {0x1F50, 0x1F57}, {0x1F59, 0x1F59},
+	{0x1F5B, 0x1F5B}, {0x1F5D, 0x1F5D}, {0x1F5F, 0x1F7D},
+	{0x1F80, 0x1FB4}, {0x1FB6, 0x1FC4}, {0x1FC6, 0x1FD3},
+	{0x1FD6, 0x1FDB}, {0x1FDD, 0x1FEF}, {0x1FF2, 0x1FF4},
+	{0x1FF6, 0x1FFE}, {0x2000, 0x200F}, {0x2011, 0x2012},
+	{0x2017, 0x2017}, {0x201A, 0x201B}, {0x201E, 0x201F},
+	{0x2023, 0x2023}, {0x2028, 0x202F}, {0x2031, 0x2031},
+	{0x2034, 0x2034}, {0x2036, 0x203A}, {0x203C, 0x203D},
+	{0x203F, 0x2064}, {0x2066, 0x2071}, {0x2075, 0x207E},
+	{0x2080, 0x2080}, {0x2085, 0x208E}, {0x2090, 0x209C},
+	{0x20A0, 0x20A8}, {0x20AA, 0x20AB}, {0x20AD, 0x20BF},
+	{0x20D0, 0x20F0}, {0x2100, 0x2102}, {0x2104, 0x2104},
+	{0x2106, 0x2108}, {0x210A, 0x2112}, {0x2114, 0x2115},
+	{0x2117, 0x2120}, {0x2123, 0x2125}, {0x2127, 0x212A},
+	{0x212C, 0x2152}, {0x2155, 0x215A}, {0x215F, 0x215F},
+	{0x216C, 0x216F}, {0x217A, 0x2188}, {0x218A, 0x218B},
+	{0x219A, 0x21B7}, {0x21BA, 0x21D1}, {0x21D3, 0x21D3},
+	{0x21D5, 0x21E6}, {0x21E8, 0x21FF}, {0x2201, 0x2201},
+	{0x2204, 0x2206}, {0x2209, 0x220A}, {0x220C, 0x220E},
+	{0x2210, 0x2210}, {0x2212, 0x2214}, {0x2216, 0x2219},
+	{0x221B, 0x221C}, {0x2221, 0x2222}, {0x2224, 0x2224},
+	{0x2226, 0x2226}, {0x222D, 0x222D}, {0x222F, 0x2233},
+	{0x2238, 0x223B}, {0x223E, 0x2247}, {0x2249, 0x224B},
+	{0x224D, 0x2251}, {0x2253, 0x225F}, {0x2262, 0x2263},
+	{0x2268, 0x2269}, {0x226C, 0x226D}, {0x2270, 0x2281},
+	{0x2284, 0x2285}, {0x2288, 0x2294}, {0x2296, 0x2298},
+	{0x229A, 0x22A4}, {0x22A6, 0x22BE}, {0x22C0, 0x2311},
+	{0x2313, 0x2319}, {0x231C, 0x2328}, {0x232B, 0x23E8},
+	{0x23ED, 0x23EF}, {0x23F1, 0x23F2}, {0x23F4, 0x2426},
+	{0x2440, 0x244A}, {0x24EA, 0x24EA}, {0x254C, 0x254F},
+	{0x2574, 0x257F}, {0x2590, 0x2591}, {0x2596, 0x259F},
+	{0x25A2, 0x25A2}, {0x25AA, 0x25B1}, {0x25B4, 0x25B5},
+	{0x25B8, 0x25BB}, {0x25BE, 0x25BF}, {0x25C2, 0x25C5},
+	{0x25C9, 0x25CA}, {0x25CC, 0x25CD}, {0x25D2, 0x25E1},
+	{0x25E6, 0x25EE}, {0x25F0, 0x25FC}, {0x25FF, 0x2604},
+	{0x2607, 0x2608}, {0x260A, 0x260D}, {0x2610, 0x2613},
+	{0x2616, 0x261B}, {0x261D, 0x261D}, {0x261F, 0x263F},
+	{0x2641, 0x2641}, {0x2643, 0x2647}, {0x2654, 0x265F},
+	{0x2662, 0x2662}, {0x2666, 0x2666}, {0x266B, 0x266B},
+	{0x266E, 0x266E}, {0x2670, 0x267E}, {0x2680, 0x2692},
+	{0x2694, 0x269D}, {0x26A0, 0x26A0}, {0x26A2, 0x26A9},
+	{0x26AC, 0x26BC}, {0x26C0, 0x26C3}, {0x26E2, 0x26E2},
+	{0x26E4, 0x26E7}, {0x2700, 0x2704}, {0x2706, 0x2709},
+	{0x270C, 0x2727}, {0x2729, 0x273C}, {0x273E, 0x274B},
+	{0x274D, 0x274D}, {0x274F, 0x2752}, {0x2756, 0x2756},
+	{0x2758, 0x2775}, {0x2780, 0x2794}, {0x2798, 0x27AF},
+	{0x27B1, 0x27BE}, {0x27C0, 0x27E5}, {0x27EE, 0x2984},
+	{0x2987, 0x2B1A}, {0x2B1D, 0x2B4F}, {0x2B51, 0x2B54},
+	{0x2B5A, 0x2B73}, {0x2B76, 0x2B95}, {0x2B98, 0x2C2E},
+	{0x2C30, 0x2C5E}, {0x2C60, 0x2CF3}, {0x2CF9, 0x2D25},
+	{0x2D27, 0x2D27}, {0x2D2D, 0x2D2D}, {0x2D30, 0x2D67},
+	{0x2D6F, 0x2D70}, {0x2D7F, 0x2D96}, {0x2DA0, 0x2DA6},
+	{0x2DA8, 0x2DAE}, {0x2DB0, 0x2DB6}, {0x2DB8, 0x2DBE},
+	{0x2DC0, 0x2DC6}, {0x2DC8, 0x2DCE}, {0x2DD0, 0x2DD6},
+	{0x2DD8, 0x2DDE}, {0x2DE0, 0x2E4F}, {0x303F, 0x303F},
+	{0x4DC0, 0x4DFF}, {0xA4D0, 0xA62B}, {0xA640, 0xA6F7},
+	{0xA700, 0xA7BF}, {0xA7C2, 0xA7C6}, {0xA7F7, 0xA82B},
+	{0xA830, 0xA839}, {0xA840, 0xA877}, {0xA880, 0xA8C5},
+	{0xA8CE, 0xA8D9}, {0xA8E0, 0xA953}, {0xA95F, 0xA95F},
+	{0xA980, 0xA9CD}, {0xA9CF, 0xA9D9}, {0xA9DE, 0xA9FE},
+	{0xAA00, 0xAA36}, {0xAA40, 0xAA4D}, {0xAA50, 0xAA59},
+	{0xAA5C, 0xAAC2}, {0xAADB, 0xAAF6}, {0xAB01, 0xAB06},
+	{0xAB09, 0xAB0E}, {0xAB11, 0xAB16}, {0xAB20, 0xAB26},
+	{0xAB28, 0xAB2E}, {0xAB30, 0xAB67}, {0xAB70, 0xABED},
+	{0xABF0, 0xABF9}, {0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB},
+	{0xD800, 0xDFFF}, {0xFB00, 0xFB06}, {0xFB13, 0xFB17},
+	{0xFB1D, 0xFB36}, {0xFB38, 0xFB3C}, {0xFB3E, 0xFB3E},
+	{0xFB40, 0xFB41}, {0xFB43, 0xFB44}, {0xFB46, 0xFBC1},
+	{0xFBD3, 0xFD3F}, {0xFD50, 0xFD8F}, {0xFD92, 0xFDC7},
+	{0xFDF0, 0xFDFD}, {0xFE20, 0xFE2F}, {0xFE70, 0xFE74},
+	{0xFE76, 0xFEFC}, {0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFC},
+	{0x10000, 0x1000B}, {0x1000D, 0x10026}, {0x10028, 0x1003A},
+	{0x1003C, 0x1003D}, {0x1003F, 0x1004D}, {0x10050, 0x1005D},
+	{0x10080, 0x100FA}, {0x10100, 0x10102}, {0x10107, 0x10133},
+	{0x10137, 0x1018E}, {0x10190, 0x1019B}, {0x101A0, 0x101A0},
+	{0x101D0, 0x101FD}, {0x10280, 0x1029C}, {0x102A0, 0x102D0},
+	{0x102E0, 0x102FB}, {0x10300, 0x10323}, {0x1032D, 0x1034A},
+	{0x10350, 0x1037A}, {0x10380, 0x1039D}, {0x1039F, 0x103C3},
+	{0x103C8, 0x103D5}, {0x10400, 0x1049D}, {0x104A0, 0x104A9},
+	{0x104B0, 0x104D3}, {0x104D8, 0x104FB}, {0x10500, 0x10527},
+	{0x10530, 0x10563}, {0x1056F, 0x1056F}, {0x10600, 0x10736},
+	{0x10740, 0x10755}, {0x10760, 0x10767}, {0x10800, 0x10805},
+	{0x10808, 0x10808}, {0x1080A, 0x10835}, {0x10837, 0x10838},
+	{0x1083C, 0x1083C}, {0x1083F, 0x10855}, {0x10857, 0x1089E},
+	{0x108A7, 0x108AF}, {0x108E0, 0x108F2}, {0x108F4, 0x108F5},
+	{0x108FB, 0x1091B}, {0x1091F, 0x10939}, {0x1093F, 0x1093F},
+	{0x10980, 0x109B7}, {0x109BC, 0x109CF}, {0x109D2, 0x10A03},
+	{0x10A05, 0x10A06}, {0x10A0C, 0x10A13}, {0x10A15, 0x10A17},
+	{0x10A19, 0x10A35}, {0x10A38, 0x10A3A}, {0x10A3F, 0x10A48},
+	{0x10A50, 0x10A58}, {0x10A60, 0x10A9F}, {0x10AC0, 0x10AE6},
+	{0x10AEB, 0x10AF6}, {0x10B00, 0x10B35}, {0x10B39, 0x10B55},
+	{0x10B58, 0x10B72}, {0x10B78, 0x10B91}, {0x10B99, 0x10B9C},
+	{0x10BA9, 0x10BAF}, {0x10C00, 0x10C48}, {0x10C80, 0x10CB2},
+	{0x10CC0, 0x10CF2}, {0x10CFA, 0x10D27}, {0x10D30, 0x10D39},
+	{0x10E60, 0x10E7E}, {0x10F00, 0x10F27}, {0x10F30, 0x10F59},
+	{0x10FE0, 0x10FF6}, {0x11000, 0x1104D}, {0x11052, 0x1106F},
+	{0x1107F, 0x110C1}, {0x110CD, 0x110CD}, {0x110D0, 0x110E8},
+	{0x110F0, 0x110F9}, {0x11100, 0x11134}, {0x11136, 0x11146},
+	{0x11150, 0x11176}, {0x11180, 0x111CD}, {0x111D0, 0x111DF},
+	{0x111E1, 0x111F4}, {0x11200, 0x11211}, {0x11213, 0x1123E},
+	{0x11280, 0x11286}, {0x11288, 0x11288}, {0x1128A, 0x1128D},
+	{0x1128F, 0x1129D}, {0x1129F, 0x112A9}, {0x112B0, 0x112EA},
+	{0x112F0, 0x112F9}, {0x11300, 0x11303}, {0x11305, 0x1130C},
+	{0x1130F, 0x11310}, {0x11313, 0x11328}, {0x1132A, 0x11330},
+	{0x11332, 0x11333}, {0x11335, 0x11339}, {0x1133B, 0x11344},
+	{0x11347, 0x11348}, {0x1134B, 0x1134D}, {0x11350, 0x11350},
+	{0x11357, 0x11357}, {0x1135D, 0x11363}, {0x11366, 0x1136C},
+	{0x11370, 0x11374}, {0x11400, 0x11459}, {0x1145B, 0x1145B},
+	{0x1145D, 0x1145F}, {0x11480, 0x114C7}, {0x114D0, 0x114D9},
+	{0x11580, 0x115B5}, {0x115B8, 0x115DD}, {0x11600, 0x11644},
+	{0x11650, 0x11659}, {0x11660, 0x1166C}, {0x11680, 0x116B8},
+	{0x116C0, 0x116C9}, {0x11700, 0x1171A}, {0x1171D, 0x1172B},
+	{0x11730, 0x1173F}, {0x11800, 0x1183B}, {0x118A0, 0x118F2},
+	{0x118FF, 0x118FF}, {0x119A0, 0x119A7}, {0x119AA, 0x119D7},
+	{0x119DA, 0x119E4}, {0x11A00, 0x11A47}, {0x11A50, 0x11AA2},
+	{0x11AC0, 0x11AF8}, {0x11C00, 0x11C08}, {0x11C0A, 0x11C36},
+	{0x11C38, 0x11C45}, {0x11C50, 0x11C6C}, {0x11C70, 0x11C8F},
+	{0x11C92, 0x11CA7}, {0x11CA9, 0x11CB6}, {0x11D00, 0x11D06},
+	{0x11D08, 0x11D09}, {0x11D0B, 0x11D36}, {0x11D3A, 0x11D3A},
+	{0x11D3C, 0x11D3D}, {0x11D3F, 0x11D47}, {0x11D50, 0x11D59},
+	{0x11D60, 0x11D65}, {0x11D67, 0x11D68}, {0x11D6A, 0x11D8E},
+	{0x11D90, 0x11D91}, {0x11D93, 0x11D98}, {0x11DA0, 0x11DA9},
+	{0x11EE0, 0x11EF8}, {0x11FC0, 0x11FF1}, {0x11FFF, 0x12399},
+	{0x12400, 0x1246E}, {0x12470, 0x12474}, {0x12480, 0x12543},
+	{0x13000, 0x1342E}, {0x13430, 0x13438}, {0x14400, 0x14646},
+	{0x16800, 0x16A38}, {0x16A40, 0x16A5E}, {0x16A60, 0x16A69},
+	{0x16A6E, 0x16A6F}, {0x16AD0, 0x16AED}, {0x16AF0, 0x16AF5},
+	{0x16B00, 0x16B45}, {0x16B50, 0x16B59}, {0x16B5B, 0x16B61},
+	{0x16B63, 0x16B77}, {0x16B7D, 0x16B8F}, {0x16E40, 0x16E9A},
+	{0x16F00, 0x16F4A}, {0x16F4F, 0x16F87}, {0x16F8F, 0x16F9F},
+	{0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C}, {0x1BC80, 0x1BC88},
+	{0x1BC90, 0x1BC99}, {0x1BC9C, 0x1BCA3}, {0x1D000, 0x1D0F5},
+	{0x1D100, 0x1D126}, {0x1D129, 0x1D1E8}, {0x1D200, 0x1D245},
+	{0x1D2E0, 0x1D2F3}, {0x1D300, 0x1D356}, {0x1D360, 0x1D378},
+	{0x1D400, 0x1D454}, {0x1D456, 0x1D49C}, {0x1D49E, 0x1D49F},
+	{0x1D4A2, 0x1D4A2}, {0x1D4A5, 0x1D4A6}, {0x1D4A9, 0x1D4AC},
+	{0x1D4AE, 0x1D4B9}, {0x1D4BB, 0x1D4BB}, {0x1D4BD, 0x1D4C3},
+	{0x1D4C5, 0x1D505}, {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514},
+	{0x1D516, 0x1D51C}, {0x1D51E, 0x1D539}, {0x1D53B, 0x1D53E},
+	{0x1D540, 0x1D544}, {0x1D546, 0x1D546}, {0x1D54A, 0x1D550},
+	{0x1D552, 0x1D6A5}, {0x1D6A8, 0x1D7CB}, {0x1D7CE, 0x1DA8B},
+	{0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, {0x1E000, 0x1E006},
+	{0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, {0x1E023, 0x1E024},
+	{0x1E026, 0x1E02A}, {0x1E100, 0x1E12C}, {0x1E130, 0x1E13D},
+	{0x1E140, 0x1E149}, {0x1E14E, 0x1E14F}, {0x1E2C0, 0x1E2F9},
+	{0x1E2FF, 0x1E2FF}, {0x1E800, 0x1E8C4}, {0x1E8C7, 0x1E8D6},
+	{0x1E900, 0x1E94B}, {0x1E950, 0x1E959}, {0x1E95E, 0x1E95F},
+	{0x1EC71, 0x1ECB4}, {0x1ED01, 0x1ED3D}, {0x1EE00, 0x1EE03},
+	{0x1EE05, 0x1EE1F}, {0x1EE21, 0x1EE22}, {0x1EE24, 0x1EE24},
+	{0x1EE27, 0x1EE27}, {0x1EE29, 0x1EE32}, {0x1EE34, 0x1EE37},
+	{0x1EE39, 0x1EE39}, {0x1EE3B, 0x1EE3B}, {0x1EE42, 0x1EE42},
+	{0x1EE47, 0x1EE47}, {0x1EE49, 0x1EE49}, {0x1EE4B, 0x1EE4B},
+	{0x1EE4D, 0x1EE4F}, {0x1EE51, 0x1EE52}, {0x1EE54, 0x1EE54},
+	{0x1EE57, 0x1EE57}, {0x1EE59, 0x1EE59}, {0x1EE5B, 0x1EE5B},
+	{0x1EE5D, 0x1EE5D}, {0x1EE5F, 0x1EE5F}, {0x1EE61, 0x1EE62},
+	{0x1EE64, 0x1EE64}, {0x1EE67, 0x1EE6A}, {0x1EE6C, 0x1EE72},
+	{0x1EE74, 0x1EE77}, {0x1EE79, 0x1EE7C}, {0x1EE7E, 0x1EE7E},
+	{0x1EE80, 0x1EE89}, {0x1EE8B, 0x1EE9B}, {0x1EEA1, 0x1EEA3},
+	{0x1EEA5, 0x1EEA9}, {0x1EEAB, 0x1EEBB}, {0x1EEF0, 0x1EEF1},
+	{0x1F000, 0x1F003}, {0x1F005, 0x1F02B}, {0x1F030, 0x1F093},
+	{0x1F0A0, 0x1F0AE}, {0x1F0B1, 0x1F0BF}, {0x1F0C1, 0x1F0CE},
+	{0x1F0D1, 0x1F0F5}, {0x1F10B, 0x1F10C}, {0x1F12E, 0x1F12F},
+	{0x1F16A, 0x1F16C}, {0x1F1E6, 0x1F1FF}, {0x1F321, 0x1F32C},
+	{0x1F336, 0x1F336}, {0x1F37D, 0x1F37D}, {0x1F394, 0x1F39F},
+	{0x1F3CB, 0x1F3CE}, {0x1F3D4, 0x1F3DF}, {0x1F3F1, 0x1F3F3},
+	{0x1F3F5, 0x1F3F7}, {0x1F43F, 0x1F43F}, {0x1F441, 0x1F441},
+	{0x1F4FD, 0x1F4FE}, {0x1F53E, 0x1F54A}, {0x1F54F, 0x1F54F},
+	{0x1F568, 0x1F579}, {0x1F57B, 0x1F594}, {0x1F597, 0x1F5A3},
+	{0x1F5A5, 0x1F5FA}, {0x1F650, 0x1F67F}, {0x1F6C6, 0x1F6CB},
+	{0x1F6CD, 0x1F6CF}, {0x1F6D3, 0x1F6D4}, {0x1F6E0, 0x1F6EA},
+	{0x1F6F0, 0x1F6F3}, {0x1F700, 0x1F773}, {0x1F780, 0x1F7D8},
+	{0x1F800, 0x1F80B}, {0x1F810, 0x1F847}, {0x1F850, 0x1F859},
+	{0x1F860, 0x1F887}, {0x1F890, 0x1F8AD}, {0x1F900, 0x1F90B},
+	{0x1FA00, 0x1FA53}, {0x1FA60, 0x1FA6D}, {0xE0001, 0xE0001},
+	{0xE0020, 0xE007F},
+}
+
+var emoji = table{
+	{0x203C, 0x203C}, {0x2049, 0x2049}, {0x2122, 0x2122},
+	{0x2139, 0x2139}, {0x2194, 0x2199}, {0x21A9, 0x21AA},
+	{0x231A, 0x231B}, {0x2328, 0x2328}, {0x2388, 0x2388},
+	{0x23CF, 0x23CF}, {0x23E9, 0x23F3}, {0x23F8, 0x23FA},
+	{0x24C2, 0x24C2}, {0x25AA, 0x25AB}, {0x25B6, 0x25B6},
+	{0x25C0, 0x25C0}, {0x25FB, 0x25FE}, {0x2600, 0x2605},
+	{0x2607, 0x2612}, {0x2614, 0x2685}, {0x2690, 0x2705},
+	{0x2708, 0x2712}, {0x2714, 0x2714}, {0x2716, 0x2716},
+	{0x271D, 0x271D}, {0x2721, 0x2721}, {0x2728, 0x2728},
+	{0x2733, 0x2734}, {0x2744, 0x2744}, {0x2747, 0x2747},
+	{0x274C, 0x274C}, {0x274E, 0x274E}, {0x2753, 0x2755},
+	{0x2757, 0x2757}, {0x2763, 0x2767}, {0x2795, 0x2797},
+	{0x27A1, 0x27A1}, {0x27B0, 0x27B0}, {0x27BF, 0x27BF},
+	{0x2934, 0x2935}, {0x2B05, 0x2B07}, {0x2B1B, 0x2B1C},
+	{0x2B50, 0x2B50}, {0x2B55, 0x2B55}, {0x3030, 0x3030},
+	{0x303D, 0x303D}, {0x3297, 0x3297}, {0x3299, 0x3299},
+	{0x1F000, 0x1F0FF}, {0x1F10D, 0x1F10F}, {0x1F12F, 0x1F12F},
+	{0x1F16C, 0x1F171}, {0x1F17E, 0x1F17F}, {0x1F18E, 0x1F18E},
+	{0x1F191, 0x1F19A}, {0x1F1AD, 0x1F1E5}, {0x1F201, 0x1F20F},
+	{0x1F21A, 0x1F21A}, {0x1F22F, 0x1F22F}, {0x1F232, 0x1F23A},
+	{0x1F23C, 0x1F23F}, {0x1F249, 0x1F3FA}, {0x1F400, 0x1F53D},
+	{0x1F546, 0x1F64F}, {0x1F680, 0x1F6FF}, {0x1F774, 0x1F77F},
+	{0x1F7D5, 0x1F7FF}, {0x1F80C, 0x1F80F}, {0x1F848, 0x1F84F},
+	{0x1F85A, 0x1F85F}, {0x1F888, 0x1F88F}, {0x1F8AE, 0x1F8FF},
+	{0x1F90C, 0x1F93A}, {0x1F93C, 0x1F945}, {0x1F947, 0x1FFFD},
+}
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_windows.go b/vendor/github.com/mattn/go-runewidth/runewidth_windows.go
new file mode 100644
index 0000000..d6a6177
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_windows.go
@@ -0,0 +1,28 @@
+// +build windows
+// +build !appengine
+
+package runewidth
+
+import (
+	"syscall"
+)
+
+var (
+	kernel32               = syscall.NewLazyDLL("kernel32")
+	procGetConsoleOutputCP = kernel32.NewProc("GetConsoleOutputCP")
+)
+
+// IsEastAsian return true if the current locale is CJK
+func IsEastAsian() bool {
+	r1, _, _ := procGetConsoleOutputCP.Call()
+	if r1 == 0 {
+		return false
+	}
+
+	switch int(r1) {
+	case 932, 51932, 936, 949, 950:
+		return true
+	}
+
+	return false
+}
diff --git a/vendor/github.com/olekukonko/tablewriter/.gitignore b/vendor/github.com/olekukonko/tablewriter/.gitignore
new file mode 100644
index 0000000..b66cec6
--- /dev/null
+++ b/vendor/github.com/olekukonko/tablewriter/.gitignore
@@ -0,0 +1,15 @@
+# Created by .ignore support plugin (hsz.mobi)
+### Go template
+# Binaries for programs and plugins
+*.exe
+*.exe~
+*.dll
+*.so
+*.dylib
+
+# Test binary, build with `go test -c`
+*.test
+
+# Output of the go coverage tool, specifically when used with LiteIDE
+*.out
+
diff --git a/vendor/github.com/olekukonko/tablewriter/.travis.yml b/vendor/github.com/olekukonko/tablewriter/.travis.yml
new file mode 100644
index 0000000..9c64270
--- /dev/null
+++ b/vendor/github.com/olekukonko/tablewriter/.travis.yml
@@ -0,0 +1,14 @@
+language: go
+
+go:
+  - 1.1
+  - 1.2
+  - 1.3
+  - 1.4
+  - 1.5
+  - 1.6
+  - 1.7
+  - 1.8
+  - 1.9
+  - "1.10"
+  - tip
diff --git a/vendor/github.com/olekukonko/tablewriter/LICENSE.md b/vendor/github.com/olekukonko/tablewriter/LICENSE.md
new file mode 100644
index 0000000..a0769b5
--- /dev/null
+++ b/vendor/github.com/olekukonko/tablewriter/LICENSE.md
@@ -0,0 +1,19 @@
+Copyright (C) 2014 by Oleku Konko
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/vendor/github.com/olekukonko/tablewriter/README.md b/vendor/github.com/olekukonko/tablewriter/README.md
new file mode 100644
index 0000000..cb9b2ef
--- /dev/null
+++ b/vendor/github.com/olekukonko/tablewriter/README.md
@@ -0,0 +1,396 @@
+ASCII Table Writer
+=========
+
+[![Build Status](https://travis-ci.org/olekukonko/tablewriter.png?branch=master)](https://travis-ci.org/olekukonko/tablewriter)
+[![Total views](https://img.shields.io/sourcegraph/rrc/github.com/olekukonko/tablewriter.svg)](https://sourcegraph.com/github.com/olekukonko/tablewriter)
+[![Godoc](https://godoc.org/github.com/olekukonko/tablewriter?status.svg)](https://godoc.org/github.com/olekukonko/tablewriter)
+
+Generate ASCII table on the fly ...  Installation is simple as
+
+    go get github.com/olekukonko/tablewriter
+
+
+#### Features
+- Automatic Padding
+- Support Multiple Lines
+- Supports Alignment
+- Support Custom Separators
+- Automatic Alignment of numbers & percentage
+- Write directly to http , file etc via `io.Writer`
+- Read directly from CSV file
+- Optional row line via `SetRowLine`
+- Normalise table header
+- Make CSV Headers optional
+- Enable or disable table border
+- Set custom footer support
+- Optional identical cells merging
+- Set custom caption
+- Optional reflowing of paragrpahs in multi-line cells.
+
+#### Example   1 - Basic
+```go
+data := [][]string{
+    []string{"A", "The Good", "500"},
+    []string{"B", "The Very very Bad Man", "288"},
+    []string{"C", "The Ugly", "120"},
+    []string{"D", "The Gopher", "800"},
+}
+
+table := tablewriter.NewWriter(os.Stdout)
+table.SetHeader([]string{"Name", "Sign", "Rating"})
+
+for _, v := range data {
+    table.Append(v)
+}
+table.Render() // Send output
+```
+
+##### Output  1
+```
++------+-----------------------+--------+
+| NAME |         SIGN          | RATING |
++------+-----------------------+--------+
+|  A   |       The Good        |    500 |
+|  B   | The Very very Bad Man |    288 |
+|  C   |       The Ugly        |    120 |
+|  D   |      The Gopher       |    800 |
++------+-----------------------+--------+
+```
+
+#### Example 2 - Without Border / Footer / Bulk Append
+```go
+data := [][]string{
+    []string{"1/1/2014", "Domain name", "2233", "$10.98"},
+    []string{"1/1/2014", "January Hosting", "2233", "$54.95"},
+    []string{"1/4/2014", "February Hosting", "2233", "$51.00"},
+    []string{"1/4/2014", "February Extra Bandwidth", "2233", "$30.00"},
+}
+
+table := tablewriter.NewWriter(os.Stdout)
+table.SetHeader([]string{"Date", "Description", "CV2", "Amount"})
+table.SetFooter([]string{"", "", "Total", "$146.93"}) // Add Footer
+table.SetBorder(false)                                // Set Border to false
+table.AppendBulk(data)                                // Add Bulk Data
+table.Render()
+```
+
+##### Output 2
+```
+
+    DATE   |       DESCRIPTION        |  CV2  | AMOUNT
+-----------+--------------------------+-------+----------
+  1/1/2014 | Domain name              |  2233 | $10.98
+  1/1/2014 | January Hosting          |  2233 | $54.95
+  1/4/2014 | February Hosting         |  2233 | $51.00
+  1/4/2014 | February Extra Bandwidth |  2233 | $30.00
+-----------+--------------------------+-------+----------
+                                        TOTAL | $146 93
+                                      --------+----------
+
+```
+
+
+#### Example 3 - CSV
+```go
+table, _ := tablewriter.NewCSV(os.Stdout, "testdata/test_info.csv", true)
+table.SetAlignment(tablewriter.ALIGN_LEFT)   // Set Alignment
+table.Render()
+```
+
+##### Output 3
+```
++----------+--------------+------+-----+---------+----------------+
+|  FIELD   |     TYPE     | NULL | KEY | DEFAULT |     EXTRA      |
++----------+--------------+------+-----+---------+----------------+
+| user_id  | smallint(5)  | NO   | PRI | NULL    | auto_increment |
+| username | varchar(10)  | NO   |     | NULL    |                |
+| password | varchar(100) | NO   |     | NULL    |                |
++----------+--------------+------+-----+---------+----------------+
+```
+
+#### Example 4  - Custom Separator
+```go
+table, _ := tablewriter.NewCSV(os.Stdout, "testdata/test.csv", true)
+table.SetRowLine(true)         // Enable row line
+
+// Change table lines
+table.SetCenterSeparator("*")
+table.SetColumnSeparator("╪")
+table.SetRowSeparator("-")
+
+table.SetAlignment(tablewriter.ALIGN_LEFT)
+table.Render()
+```
+
+##### Output 4
+```
+*------------*-----------*---------*
+╪ FIRST NAME ╪ LAST NAME ╪   SSN   ╪
+*------------*-----------*---------*
+╪ John       ╪ Barry     ╪ 123456  ╪
+*------------*-----------*---------*
+╪ Kathy      ╪ Smith     ╪ 687987  ╪
+*------------*-----------*---------*
+╪ Bob        ╪ McCornick ╪ 3979870 ╪
+*------------*-----------*---------*
+```
+
+#### Example 5 - Markdown Format
+```go
+data := [][]string{
+	[]string{"1/1/2014", "Domain name", "2233", "$10.98"},
+	[]string{"1/1/2014", "January Hosting", "2233", "$54.95"},
+	[]string{"1/4/2014", "February Hosting", "2233", "$51.00"},
+	[]string{"1/4/2014", "February Extra Bandwidth", "2233", "$30.00"},
+}
+
+table := tablewriter.NewWriter(os.Stdout)
+table.SetHeader([]string{"Date", "Description", "CV2", "Amount"})
+table.SetBorders(tablewriter.Border{Left: true, Top: false, Right: true, Bottom: false})
+table.SetCenterSeparator("|")
+table.AppendBulk(data) // Add Bulk Data
+table.Render()
+```
+
+##### Output 5
+```
+|   DATE   |       DESCRIPTION        | CV2  | AMOUNT |
+|----------|--------------------------|------|--------|
+| 1/1/2014 | Domain name              | 2233 | $10.98 |
+| 1/1/2014 | January Hosting          | 2233 | $54.95 |
+| 1/4/2014 | February Hosting         | 2233 | $51.00 |
+| 1/4/2014 | February Extra Bandwidth | 2233 | $30.00 |
+```
+
+#### Example 6  - Identical cells merging
+```go
+data := [][]string{
+  []string{"1/1/2014", "Domain name", "1234", "$10.98"},
+  []string{"1/1/2014", "January Hosting", "2345", "$54.95"},
+  []string{"1/4/2014", "February Hosting", "3456", "$51.00"},
+  []string{"1/4/2014", "February Extra Bandwidth", "4567", "$30.00"},
+}
+
+table := tablewriter.NewWriter(os.Stdout)
+table.SetHeader([]string{"Date", "Description", "CV2", "Amount"})
+table.SetFooter([]string{"", "", "Total", "$146.93"})
+table.SetAutoMergeCells(true)
+table.SetRowLine(true)
+table.AppendBulk(data)
+table.Render()
+```
+
+##### Output 6
+```
++----------+--------------------------+-------+---------+
+|   DATE   |       DESCRIPTION        |  CV2  | AMOUNT  |
++----------+--------------------------+-------+---------+
+| 1/1/2014 | Domain name              |  1234 | $10.98  |
++          +--------------------------+-------+---------+
+|          | January Hosting          |  2345 | $54.95  |
++----------+--------------------------+-------+---------+
+| 1/4/2014 | February Hosting         |  3456 | $51.00  |
++          +--------------------------+-------+---------+
+|          | February Extra Bandwidth |  4567 | $30.00  |
++----------+--------------------------+-------+---------+
+|                                       TOTAL | $146 93 |
++----------+--------------------------+-------+---------+
+```
+
+
+#### Table with color
+```go
+data := [][]string{
+	[]string{"1/1/2014", "Domain name", "2233", "$10.98"},
+	[]string{"1/1/2014", "January Hosting", "2233", "$54.95"},
+	[]string{"1/4/2014", "February Hosting", "2233", "$51.00"},
+	[]string{"1/4/2014", "February Extra Bandwidth", "2233", "$30.00"},
+}
+
+table := tablewriter.NewWriter(os.Stdout)
+table.SetHeader([]string{"Date", "Description", "CV2", "Amount"})
+table.SetFooter([]string{"", "", "Total", "$146.93"}) // Add Footer
+table.SetBorder(false)                                // Set Border to false
+
+table.SetHeaderColor(tablewriter.Colors{tablewriter.Bold, tablewriter.BgGreenColor},
+	tablewriter.Colors{tablewriter.FgHiRedColor, tablewriter.Bold, tablewriter.BgBlackColor},
+	tablewriter.Colors{tablewriter.BgRedColor, tablewriter.FgWhiteColor},
+	tablewriter.Colors{tablewriter.BgCyanColor, tablewriter.FgWhiteColor})
+
+table.SetColumnColor(tablewriter.Colors{tablewriter.Bold, tablewriter.FgHiBlackColor},
+	tablewriter.Colors{tablewriter.Bold, tablewriter.FgHiRedColor},
+	tablewriter.Colors{tablewriter.Bold, tablewriter.FgHiBlackColor},
+	tablewriter.Colors{tablewriter.Bold, tablewriter.FgBlackColor})
+
+table.SetFooterColor(tablewriter.Colors{}, tablewriter.Colors{},
+	tablewriter.Colors{tablewriter.Bold},
+	tablewriter.Colors{tablewriter.FgHiRedColor})
+
+table.AppendBulk(data)
+table.Render()
+```
+
+#### Table with color Output
+![Table with Color](https://cloud.githubusercontent.com/assets/6460392/21101956/bbc7b356-c0a1-11e6-9f36-dba694746efc.png)
+
+#### Example - 7 Table Cells with Color
+
+Individual Cell Colors from `func Rich` take precedence over Column Colors
+
+```go
+data := [][]string{
+	[]string{"Test1Merge", "HelloCol2 - 1", "HelloCol3 - 1", "HelloCol4 - 1"},
+	[]string{"Test1Merge", "HelloCol2 - 2", "HelloCol3 - 2", "HelloCol4 - 2"},
+	[]string{"Test1Merge", "HelloCol2 - 3", "HelloCol3 - 3", "HelloCol4 - 3"},
+	[]string{"Test2Merge", "HelloCol2 - 4", "HelloCol3 - 4", "HelloCol4 - 4"},
+	[]string{"Test2Merge", "HelloCol2 - 5", "HelloCol3 - 5", "HelloCol4 - 5"},
+	[]string{"Test2Merge", "HelloCol2 - 6", "HelloCol3 - 6", "HelloCol4 - 6"},
+	[]string{"Test2Merge", "HelloCol2 - 7", "HelloCol3 - 7", "HelloCol4 - 7"},
+	[]string{"Test3Merge", "HelloCol2 - 8", "HelloCol3 - 8", "HelloCol4 - 8"},
+	[]string{"Test3Merge", "HelloCol2 - 9", "HelloCol3 - 9", "HelloCol4 - 9"},
+	[]string{"Test3Merge", "HelloCol2 - 10", "HelloCol3 -10", "HelloCol4 - 10"},
+}
+
+table := tablewriter.NewWriter(os.Stdout)
+table.SetHeader([]string{"Col1", "Col2", "Col3", "Col4"})
+table.SetFooter([]string{"", "", "Footer3", "Footer4"})
+table.SetBorder(false)
+
+table.SetHeaderColor(tablewriter.Colors{tablewriter.Bold, tablewriter.BgGreenColor},
+	tablewriter.Colors{tablewriter.FgHiRedColor, tablewriter.Bold, tablewriter.BgBlackColor},
+	tablewriter.Colors{tablewriter.BgRedColor, tablewriter.FgWhiteColor},
+	tablewriter.Colors{tablewriter.BgCyanColor, tablewriter.FgWhiteColor})
+
+table.SetColumnColor(tablewriter.Colors{tablewriter.Bold, tablewriter.FgHiBlackColor},
+	tablewriter.Colors{tablewriter.Bold, tablewriter.FgHiRedColor},
+	tablewriter.Colors{tablewriter.Bold, tablewriter.FgHiBlackColor},
+	tablewriter.Colors{tablewriter.Bold, tablewriter.FgBlackColor})
+
+table.SetFooterColor(tablewriter.Colors{}, tablewriter.Colors{},
+	tablewriter.Colors{tablewriter.Bold},
+	tablewriter.Colors{tablewriter.FgHiRedColor})
+
+colorData1 := []string{"TestCOLOR1Merge", "HelloCol2 - COLOR1", "HelloCol3 - COLOR1", "HelloCol4 - COLOR1"}
+colorData2 := []string{"TestCOLOR2Merge", "HelloCol2 - COLOR2", "HelloCol3 - COLOR2", "HelloCol4 - COLOR2"}
+
+for i, row := range data {
+	if i == 4 {
+		table.Rich(colorData1, []tablewriter.Colors{tablewriter.Colors{}, tablewriter.Colors{tablewriter.Normal, tablewriter.FgCyanColor}, tablewriter.Colors{tablewriter.Bold, tablewriter.FgWhiteColor}, tablewriter.Colors{}})
+		table.Rich(colorData2, []tablewriter.Colors{tablewriter.Colors{tablewriter.Normal, tablewriter.FgMagentaColor}, tablewriter.Colors{}, tablewriter.Colors{tablewriter.Bold, tablewriter.BgRedColor}, tablewriter.Colors{tablewriter.FgHiGreenColor, tablewriter.Italic, tablewriter.BgHiCyanColor}})
+	}
+	table.Append(row)
+}
+
+table.SetAutoMergeCells(true)
+table.Render()
+
+```
+
+##### Table cells with color Output
+![Table cells with Color](https://user-images.githubusercontent.com/9064687/63969376-bcd88d80-ca6f-11e9-9466-c3d954700b25.png)
+
+#### Example 8 - Set table caption
+```go
+data := [][]string{
+    []string{"A", "The Good", "500"},
+    []string{"B", "The Very very Bad Man", "288"},
+    []string{"C", "The Ugly", "120"},
+    []string{"D", "The Gopher", "800"},
+}
+
+table := tablewriter.NewWriter(os.Stdout)
+table.SetHeader([]string{"Name", "Sign", "Rating"})
+table.SetCaption(true, "Movie ratings.")
+
+for _, v := range data {
+    table.Append(v)
+}
+table.Render() // Send output
+```
+
+Note: Caption text will wrap with total width of rendered table.
+
+##### Output 7
+```
++------+-----------------------+--------+
+| NAME |         SIGN          | RATING |
++------+-----------------------+--------+
+|  A   |       The Good        |    500 |
+|  B   | The Very very Bad Man |    288 |
+|  C   |       The Ugly        |    120 |
+|  D   |      The Gopher       |    800 |
++------+-----------------------+--------+
+Movie ratings.
+```
+
+#### Example 8 - Set NoWhiteSpace and TablePadding option
+```go
+data := [][]string{
+    {"node1.example.com", "Ready", "compute", "1.11"},
+    {"node2.example.com", "Ready", "compute", "1.11"},
+    {"node3.example.com", "Ready", "compute", "1.11"},
+    {"node4.example.com", "NotReady", "compute", "1.11"},
+}
+
+table := tablewriter.NewWriter(os.Stdout)
+table.SetHeader([]string{"Name", "Status", "Role", "Version"})
+table.SetAutoWrapText(false)
+table.SetAutoFormatHeaders(true)
+table.SetHeaderAlignment(ALIGN_LEFT)
+table.SetAlignment(ALIGN_LEFT)
+table.SetCenterSeparator("")
+table.SetColumnSeparator("")
+table.SetRowSeparator("")
+table.SetHeaderLine(false)
+table.SetBorder(false)
+table.SetTablePadding("\t") // pad with tabs
+table.SetNoWhiteSpace(true)
+table.AppendBulk(data) // Add Bulk Data
+table.Render()
+```
+
+##### Output 8
+```
+NAME             	STATUS  	ROLE   	VERSION 
+node1.example.com	Ready   	compute	1.11   	
+node2.example.com	Ready   	compute	1.11   	
+node3.example.com	Ready   	compute	1.11   	
+node4.example.com	NotReady	compute	1.11   	
+```
+
+#### Render table into a string
+
+Instead of rendering the table to `io.Stdout` you can also render it into a string. Go 1.10 introduced the `strings.Builder` type which implements the `io.Writer` interface and can therefore be used for this task. Example:
+
+```go
+package main
+
+import (
+    "strings"
+    "fmt"
+
+    "github.com/olekukonko/tablewriter"
+)
+
+func main() {
+    tableString := &strings.Builder{}
+    table := tablewriter.NewWriter(tableString)
+
+    /*
+     * Code to fill the table
+     */
+
+    table.Render()
+
+    fmt.Println(tableString.String())
+}
+```
+
+#### TODO
+- ~~Import Directly from CSV~~  - `done`
+- ~~Support for `SetFooter`~~  - `done`
+- ~~Support for `SetBorder`~~  - `done`
+- ~~Support table with uneven rows~~ - `done`
+- ~~Support custom alignment~~
+- General Improvement & Optimisation
+- `NewHTML` Parse table from HTML
diff --git a/vendor/github.com/olekukonko/tablewriter/csv.go b/vendor/github.com/olekukonko/tablewriter/csv.go
new file mode 100644
index 0000000..9887830
--- /dev/null
+++ b/vendor/github.com/olekukonko/tablewriter/csv.go
@@ -0,0 +1,52 @@
+// Copyright 2014 Oleku Konko All rights reserved.
+// Use of this source code is governed by a MIT
+// license that can be found in the LICENSE file.
+
+// This module is a Table Writer  API for the Go Programming Language.
+// The protocols were written in pure Go and works on windows and unix systems
+
+package tablewriter
+
+import (
+	"encoding/csv"
+	"io"
+	"os"
+)
+
+// Start A new table by importing from a CSV file
+// Takes io.Writer and csv File name
+func NewCSV(writer io.Writer, fileName string, hasHeader bool) (*Table, error) {
+	file, err := os.Open(fileName)
+	if err != nil {
+		return &Table{}, err
+	}
+	defer file.Close()
+	csvReader := csv.NewReader(file)
+	t, err := NewCSVReader(writer, csvReader, hasHeader)
+	return t, err
+}
+
+//  Start a New Table Writer with csv.Reader
+// This enables customisation such as reader.Comma = ';'
+// See http://golang.org/src/pkg/encoding/csv/reader.go?s=3213:3671#L94
+func NewCSVReader(writer io.Writer, csvReader *csv.Reader, hasHeader bool) (*Table, error) {
+	t := NewWriter(writer)
+	if hasHeader {
+		// Read the first row
+		headers, err := csvReader.Read()
+		if err != nil {
+			return &Table{}, err
+		}
+		t.SetHeader(headers)
+	}
+	for {
+		record, err := csvReader.Read()
+		if err == io.EOF {
+			break
+		} else if err != nil {
+			return &Table{}, err
+		}
+		t.Append(record)
+	}
+	return t, nil
+}
diff --git a/vendor/github.com/olekukonko/tablewriter/go.mod b/vendor/github.com/olekukonko/tablewriter/go.mod
new file mode 100644
index 0000000..0430d99
--- /dev/null
+++ b/vendor/github.com/olekukonko/tablewriter/go.mod
@@ -0,0 +1,5 @@
+module github.com/olekukonko/tablewriter
+
+go 1.12
+
+require github.com/mattn/go-runewidth v0.0.7
diff --git a/vendor/github.com/olekukonko/tablewriter/go.sum b/vendor/github.com/olekukonko/tablewriter/go.sum
new file mode 100644
index 0000000..1e7b9aa
--- /dev/null
+++ b/vendor/github.com/olekukonko/tablewriter/go.sum
@@ -0,0 +1,2 @@
+github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54=
+github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
diff --git a/vendor/github.com/olekukonko/tablewriter/table.go b/vendor/github.com/olekukonko/tablewriter/table.go
new file mode 100644
index 0000000..cf63ead
--- /dev/null
+++ b/vendor/github.com/olekukonko/tablewriter/table.go
@@ -0,0 +1,941 @@
+// Copyright 2014 Oleku Konko All rights reserved.
+// Use of this source code is governed by a MIT
+// license that can be found in the LICENSE file.
+
+// This module is a Table Writer  API for the Go Programming Language.
+// The protocols were written in pure Go and works on windows and unix systems
+
+// Create & Generate text based table
+package tablewriter
+
+import (
+	"bytes"
+	"fmt"
+	"io"
+	"regexp"
+	"strings"
+)
+
+const (
+	MAX_ROW_WIDTH = 30
+)
+
+const (
+	CENTER  = "+"
+	ROW     = "-"
+	COLUMN  = "|"
+	SPACE   = " "
+	NEWLINE = "\n"
+)
+
+const (
+	ALIGN_DEFAULT = iota
+	ALIGN_CENTER
+	ALIGN_RIGHT
+	ALIGN_LEFT
+)
+
+var (
+	decimal = regexp.MustCompile(`^-?(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+)?$`)
+	percent = regexp.MustCompile(`^-?\d+\.?\d*$%$`)
+)
+
+type Border struct {
+	Left   bool
+	Right  bool
+	Top    bool
+	Bottom bool
+}
+
+type Table struct {
+	out            io.Writer
+	rows           [][]string
+	lines          [][][]string
+	cs             map[int]int
+	rs             map[int]int
+	headers        [][]string
+	footers        [][]string
+	caption        bool
+	captionText    string
+	autoFmt        bool
+	autoWrap       bool
+	reflowText     bool
+	mW             int
+	pCenter        string
+	pRow           string
+	pColumn        string
+	tColumn        int
+	tRow           int
+	hAlign         int
+	fAlign         int
+	align          int
+	newLine        string
+	rowLine        bool
+	autoMergeCells bool
+	noWhiteSpace   bool
+	tablePadding   string
+	hdrLine        bool
+	borders        Border
+	colSize        int
+	headerParams   []string
+	columnsParams  []string
+	footerParams   []string
+	columnsAlign   []int
+}
+
+// Start New Table
+// Take io.Writer Directly
+func NewWriter(writer io.Writer) *Table {
+	t := &Table{
+		out:           writer,
+		rows:          [][]string{},
+		lines:         [][][]string{},
+		cs:            make(map[int]int),
+		rs:            make(map[int]int),
+		headers:       [][]string{},
+		footers:       [][]string{},
+		caption:       false,
+		captionText:   "Table caption.",
+		autoFmt:       true,
+		autoWrap:      true,
+		reflowText:    true,
+		mW:            MAX_ROW_WIDTH,
+		pCenter:       CENTER,
+		pRow:          ROW,
+		pColumn:       COLUMN,
+		tColumn:       -1,
+		tRow:          -1,
+		hAlign:        ALIGN_DEFAULT,
+		fAlign:        ALIGN_DEFAULT,
+		align:         ALIGN_DEFAULT,
+		newLine:       NEWLINE,
+		rowLine:       false,
+		hdrLine:       true,
+		borders:       Border{Left: true, Right: true, Bottom: true, Top: true},
+		colSize:       -1,
+		headerParams:  []string{},
+		columnsParams: []string{},
+		footerParams:  []string{},
+		columnsAlign:  []int{}}
+	return t
+}
+
+// Render table output
+func (t *Table) Render() {
+	if t.borders.Top {
+		t.printLine(true)
+	}
+	t.printHeading()
+	if t.autoMergeCells {
+		t.printRowsMergeCells()
+	} else {
+		t.printRows()
+	}
+	if !t.rowLine && t.borders.Bottom {
+		t.printLine(true)
+	}
+	t.printFooter()
+
+	if t.caption {
+		t.printCaption()
+	}
+}
+
+const (
+	headerRowIdx = -1
+	footerRowIdx = -2
+)
+
+// Set table header
+func (t *Table) SetHeader(keys []string) {
+	t.colSize = len(keys)
+	for i, v := range keys {
+		lines := t.parseDimension(v, i, headerRowIdx)
+		t.headers = append(t.headers, lines)
+	}
+}
+
+// Set table Footer
+func (t *Table) SetFooter(keys []string) {
+	//t.colSize = len(keys)
+	for i, v := range keys {
+		lines := t.parseDimension(v, i, footerRowIdx)
+		t.footers = append(t.footers, lines)
+	}
+}
+
+// Set table Caption
+func (t *Table) SetCaption(caption bool, captionText ...string) {
+	t.caption = caption
+	if len(captionText) == 1 {
+		t.captionText = captionText[0]
+	}
+}
+
+// Turn header autoformatting on/off. Default is on (true).
+func (t *Table) SetAutoFormatHeaders(auto bool) {
+	t.autoFmt = auto
+}
+
+// Turn automatic multiline text adjustment on/off. Default is on (true).
+func (t *Table) SetAutoWrapText(auto bool) {
+	t.autoWrap = auto
+}
+
+// Turn automatic reflowing of multiline text when rewrapping. Default is on (true).
+func (t *Table) SetReflowDuringAutoWrap(auto bool) {
+	t.reflowText = auto
+}
+
+// Set the Default column width
+func (t *Table) SetColWidth(width int) {
+	t.mW = width
+}
+
+// Set the minimal width for a column
+func (t *Table) SetColMinWidth(column int, width int) {
+	t.cs[column] = width
+}
+
+// Set the Column Separator
+func (t *Table) SetColumnSeparator(sep string) {
+	t.pColumn = sep
+}
+
+// Set the Row Separator
+func (t *Table) SetRowSeparator(sep string) {
+	t.pRow = sep
+}
+
+// Set the center Separator
+func (t *Table) SetCenterSeparator(sep string) {
+	t.pCenter = sep
+}
+
+// Set Header Alignment
+func (t *Table) SetHeaderAlignment(hAlign int) {
+	t.hAlign = hAlign
+}
+
+// Set Footer Alignment
+func (t *Table) SetFooterAlignment(fAlign int) {
+	t.fAlign = fAlign
+}
+
+// Set Table Alignment
+func (t *Table) SetAlignment(align int) {
+	t.align = align
+}
+
+// Set No White Space
+func (t *Table) SetNoWhiteSpace(allow bool) {
+	t.noWhiteSpace = allow
+}
+
+// Set Table Padding
+func (t *Table) SetTablePadding(padding string) {
+	t.tablePadding = padding
+}
+
+func (t *Table) SetColumnAlignment(keys []int) {
+	for _, v := range keys {
+		switch v {
+		case ALIGN_CENTER:
+			break
+		case ALIGN_LEFT:
+			break
+		case ALIGN_RIGHT:
+			break
+		default:
+			v = ALIGN_DEFAULT
+		}
+		t.columnsAlign = append(t.columnsAlign, v)
+	}
+}
+
+// Set New Line
+func (t *Table) SetNewLine(nl string) {
+	t.newLine = nl
+}
+
+// Set Header Line
+// This would enable / disable a line after the header
+func (t *Table) SetHeaderLine(line bool) {
+	t.hdrLine = line
+}
+
+// Set Row Line
+// This would enable / disable a line on each row of the table
+func (t *Table) SetRowLine(line bool) {
+	t.rowLine = line
+}
+
+// Set Auto Merge Cells
+// This would enable / disable the merge of cells with identical values
+func (t *Table) SetAutoMergeCells(auto bool) {
+	t.autoMergeCells = auto
+}
+
+// Set Table Border
+// This would enable / disable line around the table
+func (t *Table) SetBorder(border bool) {
+	t.SetBorders(Border{border, border, border, border})
+}
+
+func (t *Table) SetBorders(border Border) {
+	t.borders = border
+}
+
+// Append row to table
+func (t *Table) Append(row []string) {
+	rowSize := len(t.headers)
+	if rowSize > t.colSize {
+		t.colSize = rowSize
+	}
+
+	n := len(t.lines)
+	line := [][]string{}
+	for i, v := range row {
+
+		// Detect string  width
+		// Detect String height
+		// Break strings into words
+		out := t.parseDimension(v, i, n)
+
+		// Append broken words
+		line = append(line, out)
+	}
+	t.lines = append(t.lines, line)
+}
+
+// Append row to table with color attributes
+func (t *Table) Rich(row []string, colors []Colors) {
+	rowSize := len(t.headers)
+	if rowSize > t.colSize {
+		t.colSize = rowSize
+	}
+
+	n := len(t.lines)
+	line := [][]string{}
+	for i, v := range row {
+
+		// Detect string  width
+		// Detect String height
+		// Break strings into words
+		out := t.parseDimension(v, i, n)
+
+		if len(colors) > i {
+			color := colors[i]
+			out[0] = format(out[0], color)
+		}
+
+		// Append broken words
+		line = append(line, out)
+	}
+	t.lines = append(t.lines, line)
+}
+
+// Allow Support for Bulk Append
+// Eliminates repeated for loops
+func (t *Table) AppendBulk(rows [][]string) {
+	for _, row := range rows {
+		t.Append(row)
+	}
+}
+
+// NumLines to get the number of lines
+func (t *Table) NumLines() int {
+	return len(t.lines)
+}
+
+// Clear rows
+func (t *Table) ClearRows() {
+	t.lines = [][][]string{}
+}
+
+// Clear footer
+func (t *Table) ClearFooter() {
+	t.footers = [][]string{}
+}
+
+// Center based on position and border.
+func (t *Table) center(i int) string {
+	if i == -1 && !t.borders.Left {
+		return t.pRow
+	}
+
+	if i == len(t.cs)-1 && !t.borders.Right {
+		return t.pRow
+	}
+
+	return t.pCenter
+}
+
+// Print line based on row width
+func (t *Table) printLine(nl bool) {
+	fmt.Fprint(t.out, t.center(-1))
+	for i := 0; i < len(t.cs); i++ {
+		v := t.cs[i]
+		fmt.Fprintf(t.out, "%s%s%s%s",
+			t.pRow,
+			strings.Repeat(string(t.pRow), v),
+			t.pRow,
+			t.center(i))
+	}
+	if nl {
+		fmt.Fprint(t.out, t.newLine)
+	}
+}
+
+// Print line based on row width with our without cell separator
+func (t *Table) printLineOptionalCellSeparators(nl bool, displayCellSeparator []bool) {
+	fmt.Fprint(t.out, t.pCenter)
+	for i := 0; i < len(t.cs); i++ {
+		v := t.cs[i]
+		if i > len(displayCellSeparator) || displayCellSeparator[i] {
+			// Display the cell separator
+			fmt.Fprintf(t.out, "%s%s%s%s",
+				t.pRow,
+				strings.Repeat(string(t.pRow), v),
+				t.pRow,
+				t.pCenter)
+		} else {
+			// Don't display the cell separator for this cell
+			fmt.Fprintf(t.out, "%s%s",
+				strings.Repeat(" ", v+2),
+				t.pCenter)
+		}
+	}
+	if nl {
+		fmt.Fprint(t.out, t.newLine)
+	}
+}
+
+// Return the PadRight function if align is left, PadLeft if align is right,
+// and Pad by default
+func pad(align int) func(string, string, int) string {
+	padFunc := Pad
+	switch align {
+	case ALIGN_LEFT:
+		padFunc = PadRight
+	case ALIGN_RIGHT:
+		padFunc = PadLeft
+	}
+	return padFunc
+}
+
+// Print heading information
+func (t *Table) printHeading() {
+	// Check if headers is available
+	if len(t.headers) < 1 {
+		return
+	}
+
+	// Identify last column
+	end := len(t.cs) - 1
+
+	// Get pad function
+	padFunc := pad(t.hAlign)
+
+	// Checking for ANSI escape sequences for header
+	is_esc_seq := false
+	if len(t.headerParams) > 0 {
+		is_esc_seq = true
+	}
+
+	// Maximum height.
+	max := t.rs[headerRowIdx]
+
+	// Print Heading
+	for x := 0; x < max; x++ {
+		// Check if border is set
+		// Replace with space if not set
+		if !t.noWhiteSpace {
+			fmt.Fprint(t.out, ConditionString(t.borders.Left, t.pColumn, SPACE))
+		}
+
+		for y := 0; y <= end; y++ {
+			v := t.cs[y]
+			h := ""
+
+			if y < len(t.headers) && x < len(t.headers[y]) {
+				h = t.headers[y][x]
+			}
+			if t.autoFmt {
+				h = Title(h)
+			}
+			pad := ConditionString((y == end && !t.borders.Left), SPACE, t.pColumn)
+			if t.noWhiteSpace {
+				pad = ConditionString((y == end && !t.borders.Left), SPACE, t.tablePadding)
+			}
+			if is_esc_seq {
+				if !t.noWhiteSpace {
+					fmt.Fprintf(t.out, " %s %s",
+						format(padFunc(h, SPACE, v),
+							t.headerParams[y]), pad)
+				} else {
+					fmt.Fprintf(t.out, "%s %s",
+						format(padFunc(h, SPACE, v),
+							t.headerParams[y]), pad)
+				}
+			} else {
+				if !t.noWhiteSpace {
+					fmt.Fprintf(t.out, " %s %s",
+						padFunc(h, SPACE, v),
+						pad)
+				} else {
+					// the spaces between breaks the kube formatting
+					fmt.Fprintf(t.out, "%s%s",
+						padFunc(h, SPACE, v),
+						pad)
+				}
+			}
+		}
+		// Next line
+		fmt.Fprint(t.out, t.newLine)
+	}
+	if t.hdrLine {
+		t.printLine(true)
+	}
+}
+
+// Print heading information
+func (t *Table) printFooter() {
+	// Check if headers is available
+	if len(t.footers) < 1 {
+		return
+	}
+
+	// Only print line if border is not set
+	if !t.borders.Bottom {
+		t.printLine(true)
+	}
+
+	// Identify last column
+	end := len(t.cs) - 1
+
+	// Get pad function
+	padFunc := pad(t.fAlign)
+
+	// Checking for ANSI escape sequences for header
+	is_esc_seq := false
+	if len(t.footerParams) > 0 {
+		is_esc_seq = true
+	}
+
+	// Maximum height.
+	max := t.rs[footerRowIdx]
+
+	// Print Footer
+	erasePad := make([]bool, len(t.footers))
+	for x := 0; x < max; x++ {
+		// Check if border is set
+		// Replace with space if not set
+		fmt.Fprint(t.out, ConditionString(t.borders.Bottom, t.pColumn, SPACE))
+
+		for y := 0; y <= end; y++ {
+			v := t.cs[y]
+			f := ""
+			if y < len(t.footers) && x < len(t.footers[y]) {
+				f = t.footers[y][x]
+			}
+			if t.autoFmt {
+				f = Title(f)
+			}
+			pad := ConditionString((y == end && !t.borders.Top), SPACE, t.pColumn)
+
+			if erasePad[y] || (x == 0 && len(f) == 0) {
+				pad = SPACE
+				erasePad[y] = true
+			}
+
+			if is_esc_seq {
+				fmt.Fprintf(t.out, " %s %s",
+					format(padFunc(f, SPACE, v),
+						t.footerParams[y]), pad)
+			} else {
+				fmt.Fprintf(t.out, " %s %s",
+					padFunc(f, SPACE, v),
+					pad)
+			}
+
+			//fmt.Fprintf(t.out, " %s %s",
+			//	padFunc(f, SPACE, v),
+			//	pad)
+		}
+		// Next line
+		fmt.Fprint(t.out, t.newLine)
+		//t.printLine(true)
+	}
+
+	hasPrinted := false
+
+	for i := 0; i <= end; i++ {
+		v := t.cs[i]
+		pad := t.pRow
+		center := t.pCenter
+		length := len(t.footers[i][0])
+
+		if length > 0 {
+			hasPrinted = true
+		}
+
+		// Set center to be space if length is 0
+		if length == 0 && !t.borders.Right {
+			center = SPACE
+		}
+
+		// Print first junction
+		if i == 0 {
+			if length > 0 && !t.borders.Left {
+				center = t.pRow
+			}
+			fmt.Fprint(t.out, center)
+		}
+
+		// Pad With space of length is 0
+		if length == 0 {
+			pad = SPACE
+		}
+		// Ignore left space as it has printed before
+		if hasPrinted || t.borders.Left {
+			pad = t.pRow
+			center = t.pCenter
+		}
+
+		// Change Center end position
+		if center != SPACE {
+			if i == end && !t.borders.Right {
+				center = t.pRow
+			}
+		}
+
+		// Change Center start position
+		if center == SPACE {
+			if i < end && len(t.footers[i+1][0]) != 0 {
+				if !t.borders.Left {
+					center = t.pRow
+				} else {
+					center = t.pCenter
+				}
+			}
+		}
+
+		// Print the footer
+		fmt.Fprintf(t.out, "%s%s%s%s",
+			pad,
+			strings.Repeat(string(pad), v),
+			pad,
+			center)
+
+	}
+
+	fmt.Fprint(t.out, t.newLine)
+}
+
+// Print caption text
+func (t Table) printCaption() {
+	width := t.getTableWidth()
+	paragraph, _ := WrapString(t.captionText, width)
+	for linecount := 0; linecount < len(paragraph); linecount++ {
+		fmt.Fprintln(t.out, paragraph[linecount])
+	}
+}
+
+// Calculate the total number of characters in a row
+func (t Table) getTableWidth() int {
+	var chars int
+	for _, v := range t.cs {
+		chars += v
+	}
+
+	// Add chars, spaces, seperators to calculate the total width of the table.
+	// ncols := t.colSize
+	// spaces := ncols * 2
+	// seps := ncols + 1
+
+	return (chars + (3 * t.colSize) + 2)
+}
+
+func (t Table) printRows() {
+	for i, lines := range t.lines {
+		t.printRow(lines, i)
+	}
+}
+
+func (t *Table) fillAlignment(num int) {
+	if len(t.columnsAlign) < num {
+		t.columnsAlign = make([]int, num)
+		for i := range t.columnsAlign {
+			t.columnsAlign[i] = t.align
+		}
+	}
+}
+
+// Print Row Information
+// Adjust column alignment based on type
+
+func (t *Table) printRow(columns [][]string, rowIdx int) {
+	// Get Maximum Height
+	max := t.rs[rowIdx]
+	total := len(columns)
+
+	// TODO Fix uneven col size
+	// if total < t.colSize {
+	//	for n := t.colSize - total; n < t.colSize ; n++ {
+	//		columns = append(columns, []string{SPACE})
+	//		t.cs[n] = t.mW
+	//	}
+	//}
+
+	// Pad Each Height
+	pads := []int{}
+
+	// Checking for ANSI escape sequences for columns
+	is_esc_seq := false
+	if len(t.columnsParams) > 0 {
+		is_esc_seq = true
+	}
+	t.fillAlignment(total)
+
+	for i, line := range columns {
+		length := len(line)
+		pad := max - length
+		pads = append(pads, pad)
+		for n := 0; n < pad; n++ {
+			columns[i] = append(columns[i], "  ")
+		}
+	}
+	//fmt.Println(max, "\n")
+	for x := 0; x < max; x++ {
+		for y := 0; y < total; y++ {
+
+			// Check if border is set
+			if !t.noWhiteSpace {
+				fmt.Fprint(t.out, ConditionString((!t.borders.Left && y == 0), SPACE, t.pColumn))
+				fmt.Fprintf(t.out, SPACE)
+			}
+
+			str := columns[y][x]
+
+			// Embedding escape sequence with column value
+			if is_esc_seq {
+				str = format(str, t.columnsParams[y])
+			}
+
+			// This would print alignment
+			// Default alignment  would use multiple configuration
+			switch t.columnsAlign[y] {
+			case ALIGN_CENTER: //
+				fmt.Fprintf(t.out, "%s", Pad(str, SPACE, t.cs[y]))
+			case ALIGN_RIGHT:
+				fmt.Fprintf(t.out, "%s", PadLeft(str, SPACE, t.cs[y]))
+			case ALIGN_LEFT:
+				fmt.Fprintf(t.out, "%s", PadRight(str, SPACE, t.cs[y]))
+			default:
+				if decimal.MatchString(strings.TrimSpace(str)) || percent.MatchString(strings.TrimSpace(str)) {
+					fmt.Fprintf(t.out, "%s", PadLeft(str, SPACE, t.cs[y]))
+				} else {
+					fmt.Fprintf(t.out, "%s", PadRight(str, SPACE, t.cs[y]))
+
+					// TODO Custom alignment per column
+					//if max == 1 || pads[y] > 0 {
+					//	fmt.Fprintf(t.out, "%s", Pad(str, SPACE, t.cs[y]))
+					//} else {
+					//	fmt.Fprintf(t.out, "%s", PadRight(str, SPACE, t.cs[y]))
+					//}
+
+				}
+			}
+			if !t.noWhiteSpace {
+				fmt.Fprintf(t.out, SPACE)
+			} else {
+				fmt.Fprintf(t.out, t.tablePadding)
+			}
+		}
+		// Check if border is set
+		// Replace with space if not set
+		if !t.noWhiteSpace {
+			fmt.Fprint(t.out, ConditionString(t.borders.Left, t.pColumn, SPACE))
+		}
+		fmt.Fprint(t.out, t.newLine)
+	}
+
+	if t.rowLine {
+		t.printLine(true)
+	}
+}
+
+// Print the rows of the table and merge the cells that are identical
+func (t *Table) printRowsMergeCells() {
+	var previousLine []string
+	var displayCellBorder []bool
+	var tmpWriter bytes.Buffer
+	for i, lines := range t.lines {
+		// We store the display of the current line in a tmp writer, as we need to know which border needs to be print above
+		previousLine, displayCellBorder = t.printRowMergeCells(&tmpWriter, lines, i, previousLine)
+		if i > 0 { //We don't need to print borders above first line
+			if t.rowLine {
+				t.printLineOptionalCellSeparators(true, displayCellBorder)
+			}
+		}
+		tmpWriter.WriteTo(t.out)
+	}
+	//Print the end of the table
+	if t.rowLine {
+		t.printLine(true)
+	}
+}
+
+// Print Row Information to a writer and merge identical cells.
+// Adjust column alignment based on type
+
+func (t *Table) printRowMergeCells(writer io.Writer, columns [][]string, rowIdx int, previousLine []string) ([]string, []bool) {
+	// Get Maximum Height
+	max := t.rs[rowIdx]
+	total := len(columns)
+
+	// Pad Each Height
+	pads := []int{}
+
+	// Checking for ANSI escape sequences for columns
+	is_esc_seq := false
+	if len(t.columnsParams) > 0 {
+		is_esc_seq = true
+	}
+	for i, line := range columns {
+		length := len(line)
+		pad := max - length
+		pads = append(pads, pad)
+		for n := 0; n < pad; n++ {
+			columns[i] = append(columns[i], "  ")
+		}
+	}
+
+	var displayCellBorder []bool
+	t.fillAlignment(total)
+	for x := 0; x < max; x++ {
+		for y := 0; y < total; y++ {
+
+			// Check if border is set
+			fmt.Fprint(writer, ConditionString((!t.borders.Left && y == 0), SPACE, t.pColumn))
+
+			fmt.Fprintf(writer, SPACE)
+
+			str := columns[y][x]
+
+			// Embedding escape sequence with column value
+			if is_esc_seq {
+				str = format(str, t.columnsParams[y])
+			}
+
+			if t.autoMergeCells {
+				//Store the full line to merge mutli-lines cells
+				fullLine := strings.TrimRight(strings.Join(columns[y], " "), " ")
+				if len(previousLine) > y && fullLine == previousLine[y] && fullLine != "" {
+					// If this cell is identical to the one above but not empty, we don't display the border and keep the cell empty.
+					displayCellBorder = append(displayCellBorder, false)
+					str = ""
+				} else {
+					// First line or different content, keep the content and print the cell border
+					displayCellBorder = append(displayCellBorder, true)
+				}
+			}
+
+			// This would print alignment
+			// Default alignment  would use multiple configuration
+			switch t.columnsAlign[y] {
+			case ALIGN_CENTER: //
+				fmt.Fprintf(writer, "%s", Pad(str, SPACE, t.cs[y]))
+			case ALIGN_RIGHT:
+				fmt.Fprintf(writer, "%s", PadLeft(str, SPACE, t.cs[y]))
+			case ALIGN_LEFT:
+				fmt.Fprintf(writer, "%s", PadRight(str, SPACE, t.cs[y]))
+			default:
+				if decimal.MatchString(strings.TrimSpace(str)) || percent.MatchString(strings.TrimSpace(str)) {
+					fmt.Fprintf(writer, "%s", PadLeft(str, SPACE, t.cs[y]))
+				} else {
+					fmt.Fprintf(writer, "%s", PadRight(str, SPACE, t.cs[y]))
+				}
+			}
+			fmt.Fprintf(writer, SPACE)
+		}
+		// Check if border is set
+		// Replace with space if not set
+		fmt.Fprint(writer, ConditionString(t.borders.Left, t.pColumn, SPACE))
+		fmt.Fprint(writer, t.newLine)
+	}
+
+	//The new previous line is the current one
+	previousLine = make([]string, total)
+	for y := 0; y < total; y++ {
+		previousLine[y] = strings.TrimRight(strings.Join(columns[y], " "), " ") //Store the full line for multi-lines cells
+	}
+	//Returns the newly added line and wether or not a border should be displayed above.
+	return previousLine, displayCellBorder
+}
+
+func (t *Table) parseDimension(str string, colKey, rowKey int) []string {
+	var (
+		raw      []string
+		maxWidth int
+	)
+
+	raw = getLines(str)
+	maxWidth = 0
+	for _, line := range raw {
+		if w := DisplayWidth(line); w > maxWidth {
+			maxWidth = w
+		}
+	}
+
+	// If wrapping, ensure that all paragraphs in the cell fit in the
+	// specified width.
+	if t.autoWrap {
+		// If there's a maximum allowed width for wrapping, use that.
+		if maxWidth > t.mW {
+			maxWidth = t.mW
+		}
+
+		// In the process of doing so, we need to recompute maxWidth. This
+		// is because perhaps a word in the cell is longer than the
+		// allowed maximum width in t.mW.
+		newMaxWidth := maxWidth
+		newRaw := make([]string, 0, len(raw))
+
+		if t.reflowText {
+			// Make a single paragraph of everything.
+			raw = []string{strings.Join(raw, " ")}
+		}
+		for i, para := range raw {
+			paraLines, _ := WrapString(para, maxWidth)
+			for _, line := range paraLines {
+				if w := DisplayWidth(line); w > newMaxWidth {
+					newMaxWidth = w
+				}
+			}
+			if i > 0 {
+				newRaw = append(newRaw, " ")
+			}
+			newRaw = append(newRaw, paraLines...)
+		}
+		raw = newRaw
+		maxWidth = newMaxWidth
+	}
+
+	// Store the new known maximum width.
+	v, ok := t.cs[colKey]
+	if !ok || v < maxWidth || v == 0 {
+		t.cs[colKey] = maxWidth
+	}
+
+	// Remember the number of lines for the row printer.
+	h := len(raw)
+	v, ok = t.rs[rowKey]
+
+	if !ok || v < h || v == 0 {
+		t.rs[rowKey] = h
+	}
+	//fmt.Printf("Raw %+v %d\n", raw, len(raw))
+	return raw
+}
diff --git a/vendor/github.com/olekukonko/tablewriter/table_with_color.go b/vendor/github.com/olekukonko/tablewriter/table_with_color.go
new file mode 100644
index 0000000..ae7a364
--- /dev/null
+++ b/vendor/github.com/olekukonko/tablewriter/table_with_color.go
@@ -0,0 +1,136 @@
+package tablewriter
+
+import (
+	"fmt"
+	"strconv"
+	"strings"
+)
+
+const ESC = "\033"
+const SEP = ";"
+
+const (
+	BgBlackColor int = iota + 40
+	BgRedColor
+	BgGreenColor
+	BgYellowColor
+	BgBlueColor
+	BgMagentaColor
+	BgCyanColor
+	BgWhiteColor
+)
+
+const (
+	FgBlackColor int = iota + 30
+	FgRedColor
+	FgGreenColor
+	FgYellowColor
+	FgBlueColor
+	FgMagentaColor
+	FgCyanColor
+	FgWhiteColor
+)
+
+const (
+	BgHiBlackColor int = iota + 100
+	BgHiRedColor
+	BgHiGreenColor
+	BgHiYellowColor
+	BgHiBlueColor
+	BgHiMagentaColor
+	BgHiCyanColor
+	BgHiWhiteColor
+)
+
+const (
+	FgHiBlackColor int = iota + 90
+	FgHiRedColor
+	FgHiGreenColor
+	FgHiYellowColor
+	FgHiBlueColor
+	FgHiMagentaColor
+	FgHiCyanColor
+	FgHiWhiteColor
+)
+
+const (
+	Normal          = 0
+	Bold            = 1
+	UnderlineSingle = 4
+	Italic
+)
+
+type Colors []int
+
+func startFormat(seq string) string {
+	return fmt.Sprintf("%s[%sm", ESC, seq)
+}
+
+func stopFormat() string {
+	return fmt.Sprintf("%s[%dm", ESC, Normal)
+}
+
+// Making the SGR (Select Graphic Rendition) sequence.
+func makeSequence(codes []int) string {
+	codesInString := []string{}
+	for _, code := range codes {
+		codesInString = append(codesInString, strconv.Itoa(code))
+	}
+	return strings.Join(codesInString, SEP)
+}
+
+// Adding ANSI escape  sequences before and after string
+func format(s string, codes interface{}) string {
+	var seq string
+
+	switch v := codes.(type) {
+
+	case string:
+		seq = v
+	case []int:
+		seq = makeSequence(v)
+	case Colors:
+		seq = makeSequence(v)
+	default:
+		return s
+	}
+
+	if len(seq) == 0 {
+		return s
+	}
+	return startFormat(seq) + s + stopFormat()
+}
+
+// Adding header colors (ANSI codes)
+func (t *Table) SetHeaderColor(colors ...Colors) {
+	if t.colSize != len(colors) {
+		panic("Number of header colors must be equal to number of headers.")
+	}
+	for i := 0; i < len(colors); i++ {
+		t.headerParams = append(t.headerParams, makeSequence(colors[i]))
+	}
+}
+
+// Adding column colors (ANSI codes)
+func (t *Table) SetColumnColor(colors ...Colors) {
+	if t.colSize != len(colors) {
+		panic("Number of column colors must be equal to number of headers.")
+	}
+	for i := 0; i < len(colors); i++ {
+		t.columnsParams = append(t.columnsParams, makeSequence(colors[i]))
+	}
+}
+
+// Adding column colors (ANSI codes)
+func (t *Table) SetFooterColor(colors ...Colors) {
+	if len(t.footers) != len(colors) {
+		panic("Number of footer colors must be equal to number of footer.")
+	}
+	for i := 0; i < len(colors); i++ {
+		t.footerParams = append(t.footerParams, makeSequence(colors[i]))
+	}
+}
+
+func Color(colors ...int) []int {
+	return colors
+}
diff --git a/vendor/github.com/olekukonko/tablewriter/util.go b/vendor/github.com/olekukonko/tablewriter/util.go
new file mode 100644
index 0000000..380e7ab
--- /dev/null
+++ b/vendor/github.com/olekukonko/tablewriter/util.go
@@ -0,0 +1,93 @@
+// Copyright 2014 Oleku Konko All rights reserved.
+// Use of this source code is governed by a MIT
+// license that can be found in the LICENSE file.
+
+// This module is a Table Writer  API for the Go Programming Language.
+// The protocols were written in pure Go and works on windows and unix systems
+
+package tablewriter
+
+import (
+	"math"
+	"regexp"
+	"strings"
+
+	"github.com/mattn/go-runewidth"
+)
+
+var ansi = regexp.MustCompile("\033\\[(?:[0-9]{1,3}(?:;[0-9]{1,3})*)?[m|K]")
+
+func DisplayWidth(str string) int {
+	return runewidth.StringWidth(ansi.ReplaceAllLiteralString(str, ""))
+}
+
+// Simple Condition for string
+// Returns value based on condition
+func ConditionString(cond bool, valid, inValid string) string {
+	if cond {
+		return valid
+	}
+	return inValid
+}
+
+func isNumOrSpace(r rune) bool {
+	return ('0' <= r && r <= '9') || r == ' '
+}
+
+// Format Table Header
+// Replace _ , . and spaces
+func Title(name string) string {
+	origLen := len(name)
+	rs := []rune(name)
+	for i, r := range rs {
+		switch r {
+		case '_':
+			rs[i] = ' '
+		case '.':
+			// ignore floating number 0.0
+			if (i != 0 && !isNumOrSpace(rs[i-1])) || (i != len(rs)-1 && !isNumOrSpace(rs[i+1])) {
+				rs[i] = ' '
+			}
+		}
+	}
+	name = string(rs)
+	name = strings.TrimSpace(name)
+	if len(name) == 0 && origLen > 0 {
+		// Keep at least one character. This is important to preserve
+		// empty lines in multi-line headers/footers.
+		name = " "
+	}
+	return strings.ToUpper(name)
+}
+
+// Pad String
+// Attempts to place string in the center
+func Pad(s, pad string, width int) string {
+	gap := width - DisplayWidth(s)
+	if gap > 0 {
+		gapLeft := int(math.Ceil(float64(gap / 2)))
+		gapRight := gap - gapLeft
+		return strings.Repeat(string(pad), gapLeft) + s + strings.Repeat(string(pad), gapRight)
+	}
+	return s
+}
+
+// Pad String Right position
+// This would place string at the left side of the screen
+func PadRight(s, pad string, width int) string {
+	gap := width - DisplayWidth(s)
+	if gap > 0 {
+		return s + strings.Repeat(string(pad), gap)
+	}
+	return s
+}
+
+// Pad String Left position
+// This would place string at the right side of the screen
+func PadLeft(s, pad string, width int) string {
+	gap := width - DisplayWidth(s)
+	if gap > 0 {
+		return strings.Repeat(string(pad), gap) + s
+	}
+	return s
+}
diff --git a/vendor/github.com/olekukonko/tablewriter/wrap.go b/vendor/github.com/olekukonko/tablewriter/wrap.go
new file mode 100644
index 0000000..a092ee1
--- /dev/null
+++ b/vendor/github.com/olekukonko/tablewriter/wrap.go
@@ -0,0 +1,99 @@
+// Copyright 2014 Oleku Konko All rights reserved.
+// Use of this source code is governed by a MIT
+// license that can be found in the LICENSE file.
+
+// This module is a Table Writer  API for the Go Programming Language.
+// The protocols were written in pure Go and works on windows and unix systems
+
+package tablewriter
+
+import (
+	"math"
+	"strings"
+
+	"github.com/mattn/go-runewidth"
+)
+
+var (
+	nl = "\n"
+	sp = " "
+)
+
+const defaultPenalty = 1e5
+
+// Wrap wraps s into a paragraph of lines of length lim, with minimal
+// raggedness.
+func WrapString(s string, lim int) ([]string, int) {
+	words := strings.Split(strings.Replace(s, nl, sp, -1), sp)
+	var lines []string
+	max := 0
+	for _, v := range words {
+		max = runewidth.StringWidth(v)
+		if max > lim {
+			lim = max
+		}
+	}
+	for _, line := range WrapWords(words, 1, lim, defaultPenalty) {
+		lines = append(lines, strings.Join(line, sp))
+	}
+	return lines, lim
+}
+
+// WrapWords is the low-level line-breaking algorithm, useful if you need more
+// control over the details of the text wrapping process. For most uses,
+// WrapString will be sufficient and more convenient.
+//
+// WrapWords splits a list of words into lines with minimal "raggedness",
+// treating each rune as one unit, accounting for spc units between adjacent
+// words on each line, and attempting to limit lines to lim units. Raggedness
+// is the total error over all lines, where error is the square of the
+// difference of the length of the line and lim. Too-long lines (which only
+// happen when a single word is longer than lim units) have pen penalty units
+// added to the error.
+func WrapWords(words []string, spc, lim, pen int) [][]string {
+	n := len(words)
+
+	length := make([][]int, n)
+	for i := 0; i < n; i++ {
+		length[i] = make([]int, n)
+		length[i][i] = runewidth.StringWidth(words[i])
+		for j := i + 1; j < n; j++ {
+			length[i][j] = length[i][j-1] + spc + runewidth.StringWidth(words[j])
+		}
+	}
+	nbrk := make([]int, n)
+	cost := make([]int, n)
+	for i := range cost {
+		cost[i] = math.MaxInt32
+	}
+	for i := n - 1; i >= 0; i-- {
+		if length[i][n-1] <= lim {
+			cost[i] = 0
+			nbrk[i] = n
+		} else {
+			for j := i + 1; j < n; j++ {
+				d := lim - length[i][j-1]
+				c := d*d + cost[j]
+				if length[i][j-1] > lim {
+					c += pen // too-long lines get a worse penalty
+				}
+				if c < cost[i] {
+					cost[i] = c
+					nbrk[i] = j
+				}
+			}
+		}
+	}
+	var lines [][]string
+	i := 0
+	for i < n {
+		lines = append(lines, words[i:nbrk[i]])
+		i = nbrk[i]
+	}
+	return lines
+}
+
+// getLines decomposes a multiline string into a slice of strings.
+func getLines(s string) []string {
+	return strings.Split(s, nl)
+}
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 8e7b1c5..e6dbd50 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -63,6 +63,10 @@
 github.com/konsorten/go-windows-terminal-sequences
 # github.com/looplab/fsm v0.1.0
 github.com/looplab/fsm
+# github.com/mattn/go-runewidth v0.0.7
+github.com/mattn/go-runewidth
+# github.com/olekukonko/tablewriter v0.0.4
+github.com/olekukonko/tablewriter
 # github.com/opencord/cordctl v0.0.0-20190909161711-01e9c1f04bf4
 github.com/opencord/cordctl/pkg/format
 # github.com/opencord/omci-sim v0.0.4
