Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
J
joinet
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
Requirements
Requirements
List
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Operations
Operations
Environments
Packages & Registries
Packages & Registries
Package Registry
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issue
Repository
Value Stream
Wiki
Wiki
External Wiki
External Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Armin Rauschenberger
joinet
Commits
fc6f427a
Commit
fc6f427a
authored
Nov 02, 2020
by
Armin Rauschenberger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
vignette
parent
f01b9f84
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
24 additions
and
9 deletions
+24
-9
R/functions.R
R/functions.R
+4
-1
R/pkgname.R
R/pkgname.R
+2
-0
docs/pkgdown.yml
docs/pkgdown.yml
+1
-1
docs/reference/coef.joinet.html
docs/reference/coef.joinet.html
+0
-1
docs/reference/joinet-package.html
docs/reference/joinet-package.html
+3
-1
docs/reference/predict.joinet.html
docs/reference/predict.joinet.html
+4
-2
docs/reference/weights.joinet.html
docs/reference/weights.joinet.html
+4
-2
man/coef.joinet.Rd
man/coef.joinet.Rd
+0
-1
man/joinet-package.Rd
man/joinet-package.Rd
+2
-0
man/predict.joinet.Rd
man/predict.joinet.Rd
+2
-0
man/weights.joinet.Rd
man/weights.joinet.Rd
+2
-0
No files found.
R/functions.R
View file @
fc6f427a
...
...
@@ -273,12 +273,14 @@ joinet <- function(Y,X,family="gaussian",nfolds=10,foldid=NULL,type.measure="dev
#' with \eqn{n} rows (samples) and \eqn{q} columns (variables).
#'
#' @examples
#' if(!grepl('SunOS',Sys.info()['sysname'])){
#' n <- 50; p <- 100; q <- 3
#' X <- matrix(rnorm(n*p),nrow=n,ncol=p)
#' Y <- replicate(n=q,expr=rnorm(n=n,mean=rowSums(X[,1:5])))
#' Y[,1] <- 1*(Y[,1]>median(Y[,1]))
#' object <- joinet(Y=Y,X=X,family=c("binomial","gaussian","gaussian"))
#' predict(object,newx=X)
#' }
#'
predict.joinet
<-
function
(
object
,
newx
,
type
=
"response"
,
...
){
if
(
length
(
list
(
...
))
!=
0
){
warning
(
"Ignoring argument."
,
call.
=
FALSE
)}
...
...
@@ -345,7 +347,6 @@ predict.joinet <- function(object,newx,type="response",...){
#'
#' @examples
#' if(!grepl('SunOS',Sys.info()['sysname'])){
#' 1+1
#' n <- 50; p <- 100; q <- 3
#' X <- matrix(rnorm(n*p),nrow=n,ncol=p)
#' Y <- replicate(n=q,expr=rnorm(n=n,mean=rowSums(X[,1:5])))
...
...
@@ -414,11 +415,13 @@ coef.joinet <- function(object,...){
#' in the row on the outcomes in the column.
#'
#' @examples
#' if(!grepl('SunOS',Sys.info()['sysname'])){
#' n <- 50; p <- 100; q <- 3
#' X <- matrix(rnorm(n*p),nrow=n,ncol=p)
#' Y <- replicate(n=q,expr=rnorm(n=n,mean=rowSums(X[,1:5])))
#' object <- joinet(Y=Y,X=X)
#' weights(object)
#' }
#'
weights.joinet
<-
function
(
object
,
...
){
if
(
length
(
list
(
...
))
!=
0
){
warning
(
"Ignoring argument."
,
call.
=
FALSE
)}
...
...
R/pkgname.R
View file @
fc6f427a
...
...
@@ -37,6 +37,7 @@
#' Y <- replicate(n=q,expr=rnorm(n=n,mean=rowSums(X[,1:5])))
#' # n samples, p inputs, q outputs
#'
#' if(!grepl('SunOS',Sys.info()['sysname'])){
#' #--- model fitting ---
#' object <- joinet(Y=Y,X=X)
#' # slot "base": univariate
...
...
@@ -58,6 +59,7 @@
#' # cross-validated loss
#' # row "base": univariate
#' # row "meta": multivariate
#' }
#'
NULL
docs/pkgdown.yml
View file @
fc6f427a
...
...
@@ -4,5 +4,5 @@ pkgdown_sha: ~
articles
:
article
:
article.html
joinet
:
joinet.html
last_built
:
2020-11-02T1
5:36
Z
last_built
:
2020-11-02T1
7:32
Z
docs/reference/coef.joinet.html
View file @
fc6f427a
...
...
@@ -156,7 +156,6 @@ in a matrix with \(p\) rows (inputs) and \(q\) columns.</p>
<h2
class=
"hasAnchor"
id=
"examples"
><a
class=
"anchor"
href=
"#examples"
></a>
Examples
</h2>
<pre
class=
"examples"
><div
class=
'input'
><span
class=
'kw'
>
if
</span>
(!
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/grep.html'
>
grepl
</a></span>
(
<span
class=
'st'
>
'SunOS'
</span>
,
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/Sys.info.html'
>
Sys.info
</a></span>
()[
<span
class=
'st'
>
'sysname'
</span>
])){
<span
class=
'fl'
>
1
</span>
+
<span
class=
'fl'
>
1
</span>
<span
class=
'no'
>
n
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fl'
>
50
</span>
;
<span
class=
'no'
>
p
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fl'
>
100
</span>
;
<span
class=
'no'
>
q
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fl'
>
3
</span>
<span
class=
'no'
>
X
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/matrix.html'
>
matrix
</a></span>
(
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/stats/Normal.html'
>
rnorm
</a></span>
(
<span
class=
'no'
>
n
</span>
*
<span
class=
'no'
>
p
</span>
),
<span
class=
'kw'
>
nrow
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
n
</span>
,
<span
class=
'kw'
>
ncol
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
p
</span>
)
<span
class=
'no'
>
Y
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/lapply.html'
>
replicate
</a></span>
(
<span
class=
'kw'
>
n
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
q
</span>
,
<span
class=
'kw'
>
expr
</span><span
class=
'kw'
>
=
</span><span
class=
'fu'
><a
href=
'https://rdrr.io/r/stats/Normal.html'
>
rnorm
</a></span>
(
<span
class=
'kw'
>
n
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
n
</span>
,
<span
class=
'kw'
>
mean
</span><span
class=
'kw'
>
=
</span><span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/colSums.html'
>
rowSums
</a></span>
(
<span
class=
'no'
>
X
</span>
[,
<span
class=
'fl'
>
1
</span>
:
<span
class=
'fl'
>
5
</span>
])))
...
...
docs/reference/joinet-package.html
View file @
fc6f427a
...
...
@@ -160,6 +160,7 @@ to open the vignette.</p>
<span
class=
'no'
>
Y
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/lapply.html'
>
replicate
</a></span>
(
<span
class=
'kw'
>
n
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
q
</span>
,
<span
class=
'kw'
>
expr
</span><span
class=
'kw'
>
=
</span><span
class=
'fu'
><a
href=
'https://rdrr.io/r/stats/Normal.html'
>
rnorm
</a></span>
(
<span
class=
'kw'
>
n
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
n
</span>
,
<span
class=
'kw'
>
mean
</span><span
class=
'kw'
>
=
</span><span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/colSums.html'
>
rowSums
</a></span>
(
<span
class=
'no'
>
X
</span>
[,
<span
class=
'fl'
>
1
</span>
:
<span
class=
'fl'
>
5
</span>
])))
<span
class=
'co'
>
# n samples, p inputs, q outputs
</span>
<span
class=
'kw'
>
if
</span>
(!
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/grep.html'
>
grepl
</a></span>
(
<span
class=
'st'
>
'SunOS'
</span>
,
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/Sys.info.html'
>
Sys.info
</a></span>
()[
<span
class=
'st'
>
'sysname'
</span>
])){
<span
class=
'co'
>
#--- model fitting ---
</span>
<span
class=
'no'
>
object
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fu'
><a
href=
'joinet.html'
>
joinet
</a></span>
(
<span
class=
'kw'
>
Y
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
Y
</span>
,
<span
class=
'kw'
>
X
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
X
</span>
)
<span
class=
'co'
>
# slot "base": univariate
</span>
...
...
@@ -180,7 +181,8 @@ to open the vignette.</p>
<span
class=
'no'
>
loss
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fu'
><a
href=
'cv.joinet.html'
>
cv.joinet
</a></span>
(
<span
class=
'kw'
>
Y
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
Y
</span>
,
<span
class=
'kw'
>
X
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
X
</span>
)
<span
class=
'co'
>
# cross-validated loss
</span>
<span
class=
'co'
>
# row "base": univariate
</span>
<span
class=
'co'
>
# row "meta": multivariate
</span></div></pre>
<span
class=
'co'
>
# row "meta": multivariate
</span>
}
</div></pre>
</div>
<div
class=
"col-md-3 hidden-xs hidden-sm"
id=
"pkgdown-sidebar"
>
<nav
id=
"toc"
data-toggle=
"toc"
class=
"sticky-top"
>
...
...
docs/reference/predict.joinet.html
View file @
fc6f427a
...
...
@@ -159,12 +159,14 @@ The slots <code>base</code> and <code>meta</code> each contain a matrix
with \(n\) rows (samples) and \(q\) columns (variables).
</p>
<h2
class=
"hasAnchor"
id=
"examples"
><a
class=
"anchor"
href=
"#examples"
></a>
Examples
</h2>
<pre
class=
"examples"
><div
class=
'input'
><span
class=
'no'
>
n
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fl'
>
50
</span>
;
<span
class=
'no'
>
p
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fl'
>
100
</span>
;
<span
class=
'no'
>
q
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fl'
>
3
</span>
<pre
class=
"examples"
><div
class=
'input'
><span
class=
'kw'
>
if
</span>
(!
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/grep.html'
>
grepl
</a></span>
(
<span
class=
'st'
>
'SunOS'
</span>
,
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/Sys.info.html'
>
Sys.info
</a></span>
()[
<span
class=
'st'
>
'sysname'
</span>
])){
<span
class=
'no'
>
n
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fl'
>
50
</span>
;
<span
class=
'no'
>
p
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fl'
>
100
</span>
;
<span
class=
'no'
>
q
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fl'
>
3
</span>
<span
class=
'no'
>
X
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/matrix.html'
>
matrix
</a></span>
(
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/stats/Normal.html'
>
rnorm
</a></span>
(
<span
class=
'no'
>
n
</span>
*
<span
class=
'no'
>
p
</span>
),
<span
class=
'kw'
>
nrow
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
n
</span>
,
<span
class=
'kw'
>
ncol
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
p
</span>
)
<span
class=
'no'
>
Y
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/lapply.html'
>
replicate
</a></span>
(
<span
class=
'kw'
>
n
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
q
</span>
,
<span
class=
'kw'
>
expr
</span><span
class=
'kw'
>
=
</span><span
class=
'fu'
><a
href=
'https://rdrr.io/r/stats/Normal.html'
>
rnorm
</a></span>
(
<span
class=
'kw'
>
n
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
n
</span>
,
<span
class=
'kw'
>
mean
</span><span
class=
'kw'
>
=
</span><span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/colSums.html'
>
rowSums
</a></span>
(
<span
class=
'no'
>
X
</span>
[,
<span
class=
'fl'
>
1
</span>
:
<span
class=
'fl'
>
5
</span>
])))
<span
class=
'no'
>
Y
</span>
[,
<span
class=
'fl'
>
1
</span>
]
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fl'
>
1
</span>
*(
<span
class=
'no'
>
Y
</span>
[,
<span
class=
'fl'
>
1
</span>
]
<span
class=
'kw'
>
>
</span><span
class=
'fu'
><a
href=
'https://rdrr.io/r/stats/median.html'
>
median
</a></span>
(
<span
class=
'no'
>
Y
</span>
[,
<span
class=
'fl'
>
1
</span>
]))
<span
class=
'no'
>
object
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fu'
><a
href=
'joinet.html'
>
joinet
</a></span>
(
<span
class=
'kw'
>
Y
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
Y
</span>
,
<span
class=
'kw'
>
X
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
X
</span>
,
<span
class=
'kw'
>
family
</span><span
class=
'kw'
>
=
</span><span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/c.html'
>
c
</a></span>
(
<span
class=
'st'
>
"binomial"
</span>
,
<span
class=
'st'
>
"gaussian"
</span>
,
<span
class=
'st'
>
"gaussian"
</span>
))
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/stats/predict.html'
>
predict
</a></span>
(
<span
class=
'no'
>
object
</span>
,
<span
class=
'kw'
>
newx
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
X
</span>
)
</div><div
class=
'output co'
>
#
>
$base
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/stats/predict.html'
>
predict
</a></span>
(
<span
class=
'no'
>
object
</span>
,
<span
class=
'kw'
>
newx
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
X
</span>
)
}
</div><div
class=
'output co'
>
#
>
$base
#
>
[,1] [,2] [,3]
#
>
[1,] 0.41837245 -1.928585385 -2.49734037
#
>
[2,] 0.73430703 -1.232615541 -1.92258279
...
...
docs/reference/weights.joinet.html
View file @
fc6f427a
...
...
@@ -154,11 +154,13 @@ which are the effects of the outcomes
in the row on the outcomes in the column.
</p>
<h2
class=
"hasAnchor"
id=
"examples"
><a
class=
"anchor"
href=
"#examples"
></a>
Examples
</h2>
<pre
class=
"examples"
><div
class=
'input'
><span
class=
'no'
>
n
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fl'
>
50
</span>
;
<span
class=
'no'
>
p
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fl'
>
100
</span>
;
<span
class=
'no'
>
q
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fl'
>
3
</span>
<pre
class=
"examples"
><div
class=
'input'
><span
class=
'kw'
>
if
</span>
(!
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/grep.html'
>
grepl
</a></span>
(
<span
class=
'st'
>
'SunOS'
</span>
,
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/Sys.info.html'
>
Sys.info
</a></span>
()[
<span
class=
'st'
>
'sysname'
</span>
])){
<span
class=
'no'
>
n
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fl'
>
50
</span>
;
<span
class=
'no'
>
p
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fl'
>
100
</span>
;
<span
class=
'no'
>
q
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fl'
>
3
</span>
<span
class=
'no'
>
X
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/matrix.html'
>
matrix
</a></span>
(
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/stats/Normal.html'
>
rnorm
</a></span>
(
<span
class=
'no'
>
n
</span>
*
<span
class=
'no'
>
p
</span>
),
<span
class=
'kw'
>
nrow
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
n
</span>
,
<span
class=
'kw'
>
ncol
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
p
</span>
)
<span
class=
'no'
>
Y
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/lapply.html'
>
replicate
</a></span>
(
<span
class=
'kw'
>
n
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
q
</span>
,
<span
class=
'kw'
>
expr
</span><span
class=
'kw'
>
=
</span><span
class=
'fu'
><a
href=
'https://rdrr.io/r/stats/Normal.html'
>
rnorm
</a></span>
(
<span
class=
'kw'
>
n
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
n
</span>
,
<span
class=
'kw'
>
mean
</span><span
class=
'kw'
>
=
</span><span
class=
'fu'
><a
href=
'https://rdrr.io/r/base/colSums.html'
>
rowSums
</a></span>
(
<span
class=
'no'
>
X
</span>
[,
<span
class=
'fl'
>
1
</span>
:
<span
class=
'fl'
>
5
</span>
])))
<span
class=
'no'
>
object
</span>
<span
class=
'kw'
>
<
-
</span>
<span
class=
'fu'
><a
href=
'joinet.html'
>
joinet
</a></span>
(
<span
class=
'kw'
>
Y
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
Y
</span>
,
<span
class=
'kw'
>
X
</span><span
class=
'kw'
>
=
</span><span
class=
'no'
>
X
</span>
)
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/stats/weights.html'
>
weights
</a></span>
(
<span
class=
'no'
>
object
</span>
)
</div><div
class=
'output co'
>
#
>
y1 y2 y3
<span
class=
'fu'
><a
href=
'https://rdrr.io/r/stats/weights.html'
>
weights
</a></span>
(
<span
class=
'no'
>
object
</span>
)
}
</div><div
class=
'output co'
>
#
>
y1 y2 y3
#
>
(Intercept) -0.04720442 -0.15165929 0.26901703
#
>
V1 0.00000000 0.01158793 0.65726908
#
>
V2 0.55230103 0.71134918 0.45932382
...
...
man/coef.joinet.Rd
View file @
fc6f427a
...
...
@@ -25,7 +25,6 @@ the coefficients from the base learners.)
}
\examples{
if(!grepl('SunOS',Sys.info()['sysname'])){
1+1
n <- 50; p <- 100; q <- 3
X <- matrix(rnorm(n*p),nrow=n,ncol=p)
Y <- replicate(n=q,expr=rnorm(n=n,mean=rowSums(X[,1:5])))
...
...
man/joinet-package.Rd
View file @
fc6f427a
...
...
@@ -28,6 +28,7 @@ X <- matrix(rnorm(n*p),nrow=n,ncol=p)
Y <- replicate(n=q,expr=rnorm(n=n,mean=rowSums(X[,1:5])))
# n samples, p inputs, q outputs
if(!grepl('SunOS',Sys.info()['sysname'])){
#--- model fitting ---
object <- joinet(Y=Y,X=X)
# slot "base": univariate
...
...
@@ -49,6 +50,7 @@ loss <- cv.joinet(Y=Y,X=X)
# cross-validated loss
# row "base": univariate
# row "meta": multivariate
}
}
\references{
...
...
man/predict.joinet.Rd
View file @
fc6f427a
...
...
@@ -26,11 +26,13 @@ with \eqn{n} rows (samples) and \eqn{q} columns (variables).
Predicts outcome from features with stacked model.
}
\examples{
if(!grepl('SunOS',Sys.info()['sysname'])){
n <- 50; p <- 100; q <- 3
X <- matrix(rnorm(n*p),nrow=n,ncol=p)
Y <- replicate(n=q,expr=rnorm(n=n,mean=rowSums(X[,1:5])))
Y[,1] <- 1*(Y[,1]>median(Y[,1]))
object <- joinet(Y=Y,X=X,family=c("binomial","gaussian","gaussian"))
predict(object,newx=X)
}
}
man/weights.joinet.Rd
View file @
fc6f427a
...
...
@@ -24,10 +24,12 @@ Extracts coefficients from the meta learner,
i.e. the weights for the base learners.
}
\examples{
if(!grepl('SunOS',Sys.info()['sysname'])){
n <- 50; p <- 100; q <- 3
X <- matrix(rnorm(n*p),nrow=n,ncol=p)
Y <- replicate(n=q,expr=rnorm(n=n,mean=rowSums(X[,1:5])))
object <- joinet(Y=Y,X=X)
weights(object)
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment