Skip to content

Commit c701695

Browse files
committed
Update to make it compatible with CRAN 0.7-1
Mainly documentation improvements
1 parent 115bb15 commit c701695

32 files changed

+218
-107
lines changed

DESCRIPTION

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
Package: rpm
22
Type: Package
33
Title: Modeling of Revealed Preferences Matchings
4-
Version: 0.7
5-
Date: 2023-04-18
4+
Version: 0.7-1
5+
Date: 2023-04-21
66
Authors@R: c(
77
person("Mark S.", "Handcock", role=c("aut","cre"), email="handcock@stat.ucla.edu", comment=c(ORCID="0000-0002-9985-2785")),
88
person("Ryan M. ", "Admiraal", role=c("ctb"), email="ryan.admiraal@vuw.ac.nz"),
@@ -14,7 +14,7 @@ Description: Statistical estimation of revealed preference models from data coll
1414
License: GPL-3 + file LICENSE
1515
License_is_FOSS: yes
1616
License_restricts_use: no
17-
URL: https://handcock.github.io
17+
URL: https://github.com/handcock/rpm
1818
LinkingTo: Rcpp, RcppArmadillo
1919
Depends:
2020
R (>= 4.0.0),

R/Gale_Shapley.R

+9-3
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,18 @@
2525
#' Each row is a woman, each column is a man. The order of the rows is the same as the
2626
#' rows in \code{U}. The order of the columns is the same as the columns in \code{V}.}
2727
#' @seealso rpm
28-
#' @references Goyal, Handcock, Jackson. Rendall and Yeung (2023).
28+
#' @references
29+
#'
30+
#' Goyal, Shuchi; Handcock, Mark S.; Jackson, Heide M.; Rendall, Michael S. and Yeung, Fiona C. (2023).
2931
#' \emph{A Practical Revealed Preference Model for Separating Preferences and Availability Effects in Marriage Formation}
3032
#' \emph{Journal of the Royal Statistical Society}, A. \doi{10.1093/jrsssa/qnad031}
31-
#' Menzel, K. (2015).
33+
#'
34+
#' Dagsvik, John K. (2000) \emph{Aggregation in Matching Markets} \emph{International Economic Review}, Vol. 41, 27-57.
35+
#' JSTOR: https://www.jstor.org/stable/2648822, \doi{10.1111/1468-2354.00054}
36+
#'
37+
#' Menzel, Konrad (2015).
3238
#' \emph{Large Matching Markets as Two-Sided Demand Systems}
33-
#' Econometrica, Vol. 83, No. 3 (May, 2015), 897-941.
39+
#' Econometrica, Vol. 83, No. 3 (May, 2015), 897-941. \doi{10.3982/ECTA12299}
3440
#' @keywords models
3541
#' @export Gale_Shapley
3642
#'@importFrom Rcpp evalCpp

R/data.R

+3-3
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@
3232
#' assumed to be single. If men are listed in \code{Zdata} and are not partnered then they are assumed single.
3333
#' Weights are specified by three optional variables in \code{Xdata}.
3434
#' \itemize{
35-
#' \item{X_w}{ The weight variable for women. The sum of the weights of the sampled women is the
35+
#' \item{X_w}{: The weight variable for women. The sum of the weights of the sampled women is the
3636
#' number of women in the population.}
37-
#' \item{Z_w}{ The weight variable for men. The sum of the weights of the sampled men is the
37+
#' \item{Z_w}{: The weight variable for men. The sum of the weights of the sampled men is the
3838
#' number of men in the population.}
39-
#' \item{pair_w}{ The weight variable for pairs.}
39+
#' \item{pair_w}{: The weight variable for pairs.}
4040
#' }
4141
#' @examples
4242
#' library(rpm)

R/gof.rpm.R

+10-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#' matchings and a set of (possibly dyadic) covariates to
1111
#' estimate the parameters for
1212
#' linear equations of utilities.
13-
#' It does this using a large-population likelihood based on ideas from Menzel (2015).
13+
#' It does this using an large-population likelihood based on ideas from Dagsvik (2000), Menzel (2015) and Goyal et al (2023).
1414
#'
1515
#' The model represents the dyadic utility functions as deterministic linear utility functions of
1616
#' dyadic variables. These utility functions are functions of observed characteristics of the women
@@ -70,12 +70,18 @@
7070
#' sampled="sampled")
7171
#' a <- gof(fit)
7272
#' }
73-
#' @references Goyal, Handcock, Jackson. Rendall and Yeung (2023).
73+
#' @references
74+
#'
75+
#' Goyal, Shuchi; Handcock, Mark S.; Jackson, Heide M.; Rendall, Michael S. and Yeung, Fiona C. (2023).
7476
#' \emph{A Practical Revealed Preference Model for Separating Preferences and Availability Effects in Marriage Formation}
7577
#' \emph{Journal of the Royal Statistical Society}, A. \doi{10.1093/jrsssa/qnad031}
76-
#' Menzel, K. (2015).
78+
#'
79+
#' Dagsvik, John K. (2000) \emph{Aggregation in Matching Markets} \emph{International Economic Review}, Vol. 41, 27-57.
80+
#' JSTOR: https://www.jstor.org/stable/2648822, \doi{10.1111/1468-2354.00054}
81+
#'
82+
#' Menzel, Konrad (2015).
7783
#' \emph{Large Matching Markets as Two-Sided Demand Systems}
78-
#' Econometrica, Vol. 83, No. 3 (May, 2015), 897-941.
84+
#' Econometrica, Vol. 83, No. 3 (May, 2015), 897-941. \doi{10.3982/ECTA12299}
7985
#' @export gof
8086
gof <- function(object, ...){
8187
UseMethod("gof")

R/microsimulate.rpm.R

+5-1
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,15 @@
5858
#' pmfM_N <- round(fit$pmfM * num_men)
5959
#' a <- microsimulate(fit, pmfW_N=pmfW_N, pmfM_N=pmfM_N)
6060
#'}
61-
#' @references Goyal, Shuchi; Handcock, Mark S.; Jackson, Heide M.; Rendall, Michael S. and Yeung, Fiona C. (2023).
61+
#' @references
62+
#'
63+
#' Goyal, Shuchi; Handcock, Mark S.; Jackson, Heide M.; Rendall, Michael S. and Yeung, Fiona C. (2023).
6264
#' \emph{A Practical Revealed Preference Model for Separating Preferences and Availability Effects in Marriage Formation}
6365
#' \emph{Journal of the Royal Statistical Society}, A. \doi{10.1093/jrsssa/qnad031}
66+
#'
6467
#' Dagsvik, John K. (2000) \emph{Aggregation in Matching Markets} \emph{International Economic Review}, Vol. 41, 27-57.
6568
#' JSTOR: https://www.jstor.org/stable/2648822, \doi{10.1111/1468-2354.00054}
69+
#'
6670
#' Menzel, Konrad (2015).
6771
#' \emph{Large Matching Markets as Two-Sided Demand Systems}
6872
#' Econometrica, Vol. 83, No. 3 (May, 2015), 897-941. \doi{10.3982/ECTA12299}

R/rpm-package.R

+5-1
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,15 @@
6262
#' # For information on the current terms that can be used in formulas:
6363
#' help("rpm-terms")
6464
#'
65-
#' @references Goyal, Shuchi; Handcock, Mark S.; Jackson, Heide M.; Rendall, Michael S. and Yeung, Fiona C. (2023).
65+
#' @references
66+
#'
67+
#' Goyal, Shuchi; Handcock, Mark S.; Jackson, Heide M.; Rendall, Michael S. and Yeung, Fiona C. (2023).
6668
#' \emph{A Practical Revealed Preference Model for Separating Preferences and Availability Effects in Marriage Formation}
6769
#' \emph{Journal of the Royal Statistical Society}, A. \doi{10.1093/jrsssa/qnad031}
70+
#'
6871
#' Dagsvik, John K. (2000) \emph{Aggregation in Matching Markets} \emph{International Economic Review}, Vol. 41, 27-57.
6972
#' JSTOR: https://www.jstor.org/stable/2648822, \doi{10.1111/1468-2354.00054}
73+
#'
7074
#' Menzel, Konrad (2015).
7175
#' \emph{Large Matching Markets as Two-Sided Demand Systems}
7276
#' Econometrica, Vol. 83, No. 3 (May, 2015), 897-941. \doi{10.3982/ECTA12299}

R/rpm-terms.R

+10-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#' matchings and a set of (possibly dyadic) covariates to
88
#' estimate the parameters for
99
#' linear equations of utilities.
10-
#' It does this using a large-population likelihood based on ideas from Menzel (2015).
10+
#' It does this using an large-population likelihood based on ideas from Dagsvik (2000), Menzel (2015) and Goyal et al (2023).
1111
#'
1212
#' The model represents the dyadic utility functions as deterministic linear utility functions of
1313
#' dyadic variables. These utility functions are functions of observed characteristics of the women
@@ -146,12 +146,18 @@
146146
#' @return No return value, called for side effects.
147147
#' @seealso \code{\link[=rpm-package]{rpm}} package,
148148
#' \code{\link{rpm}}
149-
#' @references Goyal, Handcock, Jackson. Rendall and Yeung (2023).
149+
#' @references
150+
#'
151+
#' Goyal, Shuchi; Handcock, Mark S.; Jackson, Heide M.; Rendall, Michael S. and Yeung, Fiona C. (2023).
150152
#' \emph{A Practical Revealed Preference Model for Separating Preferences and Availability Effects in Marriage Formation}
151153
#' \emph{Journal of the Royal Statistical Society}, A. \doi{10.1093/jrsssa/qnad031}
152-
#' Menzel, K. (2015).
154+
#'
155+
#' Dagsvik, John K. (2000) \emph{Aggregation in Matching Markets} \emph{International Economic Review}, Vol. 41, 27-57.
156+
#' JSTOR: https://www.jstor.org/stable/2648822, \doi{10.1111/1468-2354.00054}
157+
#'
158+
#' Menzel, Konrad (2015).
153159
#' \emph{Large Matching Markets as Two-Sided Demand Systems}
154-
#' Econometrica, Vol. 83, No. 3 (May, 2015), 897-941.
160+
#' Econometrica, Vol. 83, No. 3 (May, 2015), 897-941. \doi{10.3982/ECTA12299}
155161
#'
156162
#' @keywords models
157163
#' @examples

R/rpm.R

+8-4
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@
4949
#' assumed to be single. If men are listed in \code{Zdata} and are not partnered then they are assumed single.
5050
#' Weights are specified by three optional variables in \code{Xdata}.
5151
#' \itemize{
52-
#' \item{X_w}{This is character string of the name of the weight variable for women. The sum of the weights should be the
52+
#' \item{X_w}{: This is character string of the name of the weight variable for women. The sum of the weights should be the
5353
#' number of women in the population.}
54-
#' \item{Z_w}{This is character string of the name of the weight variable for men. The sum of the weights should be the
54+
#' \item{Z_w}{: This is character string of the name of the weight variable for men. The sum of the weights should be the
5555
#' number of men in the population.}
56-
#' \item{pair_w}{This is character string of the name of the weight variable for pairs.}
56+
#' \item{pair_w}{: This is character string of the name of the weight variable for pairs.}
5757
#' }
5858
#' @return \code{\link{rpm}} returns an object of class \code{\link{rpm.object}}
5959
#' that is a list consisting of the following elements:
@@ -79,11 +79,15 @@
7979
#' \item{eq}{Values from the equality constraints. Larger values indicate non-convergence.}
8080
#' \item{sample}{A matrix with the number of rows the MCMC sample size and the number of rows the number of parameters.}
8181
#' @seealso control.rpm, summary.rpm, print.rpm
82-
#' @references Goyal, Shuchi; Handcock, Mark S.; Jackson, Heide M.; Rendall, Michael S. and Yeung, Fiona C. (2023).
82+
#' @references
83+
#'
84+
#' Goyal, Shuchi; Handcock, Mark S.; Jackson, Heide M.; Rendall, Michael S. and Yeung, Fiona C. (2023).
8385
#' \emph{A Practical Revealed Preference Model for Separating Preferences and Availability Effects in Marriage Formation}
8486
#' \emph{Journal of the Royal Statistical Society}, A. \doi{10.1093/jrsssa/qnad031}
87+
#'
8588
#' Dagsvik, John K. (2000) \emph{Aggregation in Matching Markets} \emph{International Economic Review}, Vol. 41, 27-57.
8689
#' JSTOR: https://www.jstor.org/stable/2648822, \doi{10.1111/1468-2354.00054}
90+
#'
8791
#' Menzel, Konrad (2015).
8892
#' \emph{Large Matching Markets as Two-Sided Demand Systems}
8993
#' Econometrica, Vol. 83, No. 3 (May, 2015), 897-941. \doi{10.3982/ECTA12299}

R/rpm.model.functions.R

+9-3
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,18 @@
1212
#' \code{\link{control.rpm}}, which should be consulted for specifics.
1313
#' @return A list of model terms as bivariate functions.
1414
#' @seealso rpm
15-
#' @references Goyal, Handcock, Jackson. Rendall and Yeung (2023).
15+
#' @references
16+
#'
17+
#' Goyal, Shuchi; Handcock, Mark S.; Jackson, Heide M.; Rendall, Michael S. and Yeung, Fiona C. (2023).
1618
#' \emph{A Practical Revealed Preference Model for Separating Preferences and Availability Effects in Marriage Formation}
1719
#' \emph{Journal of the Royal Statistical Society}, A. \doi{10.1093/jrsssa/qnad031}
18-
#' Menzel, K. (2015).
20+
#'
21+
#' Dagsvik, John K. (2000) \emph{Aggregation in Matching Markets} \emph{International Economic Review}, Vol. 41, 27-57.
22+
#' JSTOR: https://www.jstor.org/stable/2648822, \doi{10.1111/1468-2354.00054}
23+
#'
24+
#' Menzel, Konrad (2015).
1925
#' \emph{Large Matching Markets as Two-Sided Demand Systems}
20-
#' Econometrica, Vol. 83, No. 3 (May, 2015), 897-941.
26+
#' Econometrica, Vol. 83, No. 3 (May, 2015), 897-941. \doi{10.3982/ECTA12299}
2127
#' @keywords models
2228
#' @examples
2329
#' # nothing yet

R/rpm.model.matrix.R

+9-3
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,18 @@
1717
#' \item{Xnames}{the names of the covariates for women.}
1818
#' \item{Znames}{the names of the covariates for men.}
1919
#' @seealso rpm
20-
#' @references Goyal, Handcock, Jackson. Rendall and Yeung (2023).
20+
#' @references
21+
#'
22+
#' Goyal, Shuchi; Handcock, Mark S.; Jackson, Heide M.; Rendall, Michael S. and Yeung, Fiona C. (2023).
2123
#' \emph{A Practical Revealed Preference Model for Separating Preferences and Availability Effects in Marriage Formation}
2224
#' \emph{Journal of the Royal Statistical Society}, A. \doi{10.1093/jrsssa/qnad031}
23-
#' Menzel, K. (2015).
25+
#'
26+
#' Dagsvik, John K. (2000) \emph{Aggregation in Matching Markets} \emph{International Economic Review}, Vol. 41, 27-57.
27+
#' JSTOR: https://www.jstor.org/stable/2648822, \doi{10.1111/1468-2354.00054}
28+
#'
29+
#' Menzel, Konrad (2015).
2430
#' \emph{Large Matching Markets as Two-Sided Demand Systems}
25-
#' Econometrica, Vol. 83, No. 3 (May, 2015), 897-941.
31+
#' Econometrica, Vol. 83, No. 3 (May, 2015), 897-941. \doi{10.3982/ECTA12299}
2632
#' @keywords models
2733
#' @examples
2834
#' # nothing yet

R/rpm.utilities.R

+1
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ rpm.hessian_nog <- function(theta,Sd,Xd,Zd,NumBeta,NumGamma,NumGammaW,NumGammaM,
107107
#'
108108
#' @param ... arguments to [`print`].
109109
#' @param messageArgs a list of arguments to be passed directly to [`message`].
110+
#' @return No return value, called for side effects.
110111
#'
111112
#' @examples
112113
#' cat(1:5)

R/rpm_MLPLE.R

+13-7
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#' matchings and a set of (possibly dyadic) covariates to
88
#' estimate the parameters for
99
#' linear equations of utilities.
10-
#' It does this using a large-population approximation to the likelihood based on ideas from Menzel (2015).
10+
#' It does this using an large-population likelihood based on ideas from Dagsvik (2000), Menzel (2015) and Goyal et al (2023).
1111
#'
1212
#' It is usually called via the \code{\link{rpm}} function.
1313
#' @param formula formula; an \code{\link{formula}} object, of the form \code{
@@ -49,11 +49,11 @@
4949
#' assumed to be single. If men are listed in \code{Zdata} and are not partnered then they are assumed single.
5050
#' Weights are specified by three optional variables in \code{Xdata}.
5151
#' \itemize{
52-
#' \item{X_w}{This is character string of the name of the weight variable for women. The sum of the weights should be the
52+
#' \item{X_w}{: This is character string of the name of the weight variable for women. The sum of the weights should be the
5353
#' number of women in the population.}
54-
#' \item{Z_w}{This is character string of the name of the weight variable for men. The sum of the weights should be the
54+
#' \item{Z_w}{: This is character string of the name of the weight variable for men. The sum of the weights should be the
5555
#' number of men in the population.}
56-
#' \item{pair_w}{This is character string of the name of the weight variable for pairs.}
56+
#' \item{pair_w}{: This is character string of the name of the weight variable for pairs.}
5757
#' }
5858
#' @return \code{\link{rpm}} returns an object of class \code{\link{rpm.object}}
5959
#' that is a list consisting of the following elements:
@@ -76,12 +76,18 @@
7676
#' \item{covar}{Approximate covariance matrix of the estimates.}
7777
#' \item{eq}{Values from the equality constraints. Larger values indicate non-convergence.}
7878
#' @seealso control.rpm, summary.rpm, print.rpm
79-
#' @references Goyal, Handcock, Jackson. Rendall and Yeung (2023).
79+
#' @references
80+
#'
81+
#' Goyal, Shuchi; Handcock, Mark S.; Jackson, Heide M.; Rendall, Michael S. and Yeung, Fiona C. (2023).
8082
#' \emph{A Practical Revealed Preference Model for Separating Preferences and Availability Effects in Marriage Formation}
8183
#' \emph{Journal of the Royal Statistical Society}, A. \doi{10.1093/jrsssa/qnad031}
82-
#' Menzel, K. (2015).
84+
#'
85+
#' Dagsvik, John K. (2000) \emph{Aggregation in Matching Markets} \emph{International Economic Review}, Vol. 41, 27-57.
86+
#' JSTOR: https://www.jstor.org/stable/2648822, \doi{10.1111/1468-2354.00054}
87+
#'
88+
#' Menzel, Konrad (2015).
8389
#' \emph{Large Matching Markets as Two-Sided Demand Systems}
84-
#' Econometrica, Vol. 83, No. 3 (May, 2015), 897-941.
90+
#' Econometrica, Vol. 83, No. 3 (May, 2015), 897-941. \doi{10.3982/ECTA12299}
8591
#' @keywords models
8692
#' @examples
8793
#' library(rpm)

R/rpm_make_counts.R

+19-14
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,18 @@ rpm_make_counts <- function(Xdata, Zdata, sampling_design, sampled, Xid, Zid, pa
22

33
num_Xu <- nrow(Xu)
44
num_Zu <- nrow(Zu)
5-
cnW <- paste(colnames(Xu)[2],Xu[,2], sep=".")
6-
for(i in 2:ncol(Xu)){
5+
if(ncol(Xu)>1){
6+
cnW <- paste(colnames(Xu)[2],Xu[,2], sep=".")
7+
for(i in 2:ncol(Xu)){
78
cnW <- paste(cnW,paste(colnames(Xu)[i],Xu[,i], sep="."),sep='.')
8-
}
9-
cnM <- paste(colnames(Zu)[2],Zu[,2], sep=".")
10-
for(i in 2:ncol(Zu)){
9+
}
10+
}else{ cnW <- "Int" }
11+
if(ncol(Zu)>1){
12+
cnM <- paste(colnames(Zu)[2],Zu[,2], sep=".")
13+
for(i in 2:ncol(Zu)){
1114
cnM <- paste(cnM,paste(colnames(Zu)[i],Zu[,i], sep="."),sep='.')
12-
}
15+
}
16+
}else{ cnM <- "Int" }
1317

1418
if(sampling_design == "stock-stock"){
1519
# IDs of the women matched to the sampled men (and vice versa)
@@ -73,19 +77,20 @@ rpm_make_counts <- function(Xdata, Zdata, sampling_design, sampled, Xid, Zid, pa
7377
}
7478

7579
if (sampling_design == "stock-stock") {
80+
x_wts <- Xdata[,X_w] * Xdata[,sampled]
81+
z_wts <- Zdata[,Z_w] * Zdata[,sampled]
7682
subset=Xdata[,sampled] & is.na(Xdata[,pair_id])
7783
pmfW_S = as.numeric(stats::xtabs(X_w ~ factor(Xtype,1:num_Xu), data=Xdata, subset=subset))
7884
subset=Xdata[,sampled] & !is.na(Xdata[,pair_id])
79-
pmfW_P = as.numeric(stats::xtabs(X_w ~ factor(Xtype,1:num_Xu), data=Xdata, subset=subset))
85+
x_wts[subset] <- 0.5*x_wts[subset]
86+
pmfW_P = 0.5*as.numeric(stats::xtabs(X_w ~ factor(Xtype,1:num_Xu), data=Xdata, subset=subset))
8087
pmfW = pmfW_S + pmfW_P
8188
subset=Zdata[,sampled] & is.na(Zdata[,pair_id])
8289
pmfM_S = as.numeric(stats::xtabs(Z_w ~ factor(Ztype,1:num_Zu), data=Zdata, subset=subset))
8390
subset=Zdata[,sampled] & !is.na(Zdata[,pair_id])
84-
pmfM_P = as.numeric(stats::xtabs(Z_w ~ factor(Ztype,1:num_Zu), data=Zdata, subset=subset))
91+
z_wts[subset] <- 0.5*z_wts[subset]
92+
pmfM_P = 0.5*as.numeric(stats::xtabs(Z_w ~ factor(Ztype,1:num_Zu), data=Zdata, subset=subset))
8593
pmfM = pmfM_S + pmfM_P
86-
#
87-
x_wts <- Xdata[,X_w] * Xdata[,sampled]
88-
z_wts <- Zdata[,Z_w] * Zdata[,sampled]
8994
}
9095
if (sampling_design == "stock-flow") {
9196
pmfW = as.numeric(stats::xtabs(X_w ~ factor(Xtype,1:num_Xu), data=Xdata, subset=sampled))
@@ -108,8 +113,8 @@ rpm_make_counts <- function(Xdata, Zdata, sampling_design, sampled, Xid, Zid, pa
108113
}
109114
pmfW = pmfW/sum(pmfW)
110115
pmfM = pmfM/sum(pmfM)
111-
names(pmfW) <- paste(colnames(Xu)[2],Xu[,2], sep=".")
112-
names(pmfM) <- paste(colnames(Zu)[2],Zu[,2], sep=".")
116+
names(pmfW) <- cnW
117+
names(pmfM) <- cnM
113118

114119
if(verbose){
115120
message(sprintf("Proportion population paired size: %f",sum(Zdata[paired_and_sampled_M,Z_w])/n))
@@ -260,6 +265,6 @@ rpm_make_counts <- function(Xdata, Zdata, sampling_design, sampled, Xid, Zid, pa
260265

261266
list(pmf=pmf, counts=counts, pmfW=pmfW, pmfM=pmfM, pmfN=pmfN, N=N, gw=gw, gm=gm,
262267
num_women=num_women, num_men=num_men, num_sampled=num_sampled,
263-
x_wts =x_wts, z_wts=z_wts
268+
x_wts=x_wts, z_wts=z_wts
264269
)
265270
}

0 commit comments

Comments
 (0)