質問編集履歴
5
画像差し替え
title
CHANGED
File without changes
|
body
CHANGED
@@ -237,5 +237,5 @@
|
|
237
237
|
```
|
238
238
|

|
239
239
|

|
240
|
-

|
241
241
|

|
4
CNContactPickerViewControllerのチェックを消したいです。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
連絡先
|
1
|
+
連絡先CNContactPickerViewControllerのチェックが消えません(初期化したいです)。
|
body
CHANGED
@@ -3,10 +3,12 @@
|
|
3
3
|
①ViewControllerに「取得」ボタンを置き、このボタンを押すとiPhoneの連絡先一覧が開きます。
|
4
4
|
②一覧から任意の人(複数人)を選んでチェックし「Done」を押すと
|
5
5
|
アラートが開き、選択した人が表示されます。
|
6
|
-
③そこから
|
6
|
+
③そこからさらに人をタップすると、その人の名前、携帯番号、メールアドレスを表示する。
|
7
|
+
④人を選んで情報を取得アラートを表示。
|
8
|
+
⑤4のアラートの「OK」を押すとViewControllerに戻る。
|
9
|
+
**⑥再度、ViewControllerの「取得」ボタンを押してiPhoneの連絡先一覧を開くと
|
10
|
+
チェックが外れていません。**
|
7
11
|
******************************************************************
|
8
|
-
③までは、なんとかできたのですが、アラートの「OK」を押して**ViewControllerに戻って再度「取得」ボタンを押して連絡先一覧を開くと
|
9
|
-
チェックが消えていません。**リフレッシュできるのでしょうか?
|
10
12
|
```ここに言語を入力
|
11
13
|
// ViewController.swift
|
12
14
|
// ToAdressBook
|
@@ -123,8 +125,10 @@
|
|
123
125
|
title: self.target[i].name,
|
124
126
|
message: "(self.target[i].email)" + "\n" + "(self.target[i].phNo)",
|
125
127
|
preferredStyle:.alert)
|
126
|
-
|
128
|
+
** kekkaAlert.addAction(UIAlertAction(title: "OK", style: .default))
|
129
|
+
**
|
130
|
+
**//このOKを押したらCNContactPickerVeiwのチェックを全て外したい。
|
127
|
-
|
131
|
+
**self.present(kekkaAlert, animated: true, completion: nil)
|
128
132
|
print("target name = (self.target[i].name)")
|
129
133
|
print("target email = (self.target[i].email)")
|
130
134
|
print("target phoneNumber = (self.target[i].phNo)")
|
3
こーどを変更しました。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
連絡先一覧から情報を取得しアラートで表示したいです。
|
1
|
+
連絡先一覧から情報を取得しアラートで表示したいです。PickerViewのチェックが消えません
|
body
CHANGED
@@ -5,9 +5,8 @@
|
|
5
5
|
アラートが開き、選択した人が表示されます。
|
6
6
|
③そこから**さらに人をタップすると、その人の名前、携帯番号、メールアドレスを表示したいです**。
|
7
7
|
******************************************************************
|
8
|
-
③までは、なんとかできたのですが、**携帯番号、メールアドレスの表示がおかしいです。**
|
9
|
-
また**ViewControllerに戻って再度「取得」ボタンを押して連絡先一覧を開くと
|
8
|
+
③までは、なんとかできたのですが、アラートの「OK」を押して**ViewControllerに戻って再度「取得」ボタンを押して連絡先一覧を開くと
|
10
|
-
チェックが消えていません。**
|
9
|
+
チェックが消えていません。**リフレッシュできるのでしょうか?
|
11
10
|
```ここに言語を入力
|
12
11
|
// ViewController.swift
|
13
12
|
// ToAdressBook
|
@@ -24,7 +23,7 @@
|
|
24
23
|
@IBOutlet weak var phoneNumberField: UITextField!
|
25
24
|
@IBOutlet weak var emailAddressField: UITextField!
|
26
25
|
@IBOutlet weak var givenNameField: UITextField!
|
27
|
-
var target: [(name:String,email:
|
26
|
+
**var target: [(name:String,email:String,phNo:String)] = []**
|
28
27
|
var nameList:[String] = []
|
29
28
|
let cnPicker = CNContactPickerViewController()
|
30
29
|
//未入力時アラート
|
@@ -152,8 +151,8 @@
|
|
152
151
|
func contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]){
|
153
152
|
contacts.forEach { contact in
|
154
153
|
let names = contact.givenName + " " + contact.familyName
|
155
|
-
let emails = contact.emailAddresses
|
154
|
+
let emails = (contact.emailAddresses[0].value as! String)
|
156
|
-
let phoneNo = contact.phoneNumbers
|
155
|
+
let phoneNo = (contact.phoneNumbers[0].value as! CNPhoneNumber).value(forKey: "digits") as! String
|
157
156
|
|
158
157
|
print("name is = (names)")
|
159
158
|
print("email is = (emails)")
|
2
コードを変更しました。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
連絡先一覧
|
1
|
+
連絡先一覧から情報を取得しアラートで表示したいです。
|
body
CHANGED
@@ -5,24 +5,99 @@
|
|
5
5
|
アラートが開き、選択した人が表示されます。
|
6
6
|
③そこから**さらに人をタップすると、その人の名前、携帯番号、メールアドレスを表示したいです**。
|
7
7
|
******************************************************************
|
8
|
-
|
8
|
+
③までは、なんとかできたのですが、**携帯番号、メールアドレスの表示がおかしいです。**
|
9
9
|
また**ViewControllerに戻って再度「取得」ボタンを押して連絡先一覧を開くと
|
10
10
|
チェックが消えていません。**
|
11
|
-
[CNLabeledValue<NSString>]のメールアドレスをStringに変換することはできないのでしょうか?
|
12
11
|
```ここに言語を入力
|
12
|
+
// ViewController.swift
|
13
|
+
// ToAdressBook
|
14
|
+
// Created by admin on 2017/11/13.
|
15
|
+
// Copyright © 2017年 css. All rights reserved.
|
16
|
+
|
13
17
|
import UIKit
|
14
18
|
import Contacts
|
15
19
|
import ContactsUI
|
20
|
+
|
16
21
|
class ViewController: UIViewController, CNContactPickerDelegate, CNContactViewControllerDelegate {
|
17
22
|
|
18
23
|
@IBOutlet weak var nameField: UITextField!
|
19
24
|
@IBOutlet weak var phoneNumberField: UITextField!
|
20
25
|
@IBOutlet weak var emailAddressField: UITextField!
|
21
26
|
@IBOutlet weak var givenNameField: UITextField!
|
22
|
-
var target: [(name:String,email:[CNLabeledValue<NSString>],phNo:CNLabeledValue<CNPhoneNumber>)] = []
|
27
|
+
var target: [(name:String,email:[CNLabeledValue<NSString>],phNo:[CNLabeledValue<CNPhoneNumber>])] = []
|
23
28
|
var nameList:[String] = []
|
24
29
|
let cnPicker = CNContactPickerViewController()
|
30
|
+
//未入力時アラート
|
31
|
+
func minyuryokuAlert() {
|
32
|
+
let alert = UIAlertController(
|
33
|
+
title: "未入力の欄があります",
|
34
|
+
message: "",
|
35
|
+
preferredStyle: .alert)
|
36
|
+
alert.addAction(UIAlertAction(title:"OK", style: .default))
|
37
|
+
self.present(alert, animated: true, completion: nil)
|
38
|
+
}
|
25
39
|
|
40
|
+
//「登録」ボタン押下
|
41
|
+
@IBAction func registerBTPush(_ sender: Any) {
|
42
|
+
//連絡先に追加する可変オブジェクト作成
|
43
|
+
let newcontact = CNMutableContact()
|
44
|
+
//newcontact.imageData = NSData() as Data //NSDataオブジェクトとしてのプロフィール画像
|
45
|
+
//キーボードを下げる
|
46
|
+
view.endEditing(true)
|
47
|
+
if nameField.text == "" {
|
48
|
+
self.minyuryokuAlert()
|
49
|
+
}
|
50
|
+
if givenNameField.text == "" {
|
51
|
+
self.minyuryokuAlert()
|
52
|
+
}
|
53
|
+
if phoneNumberField.text == "" {
|
54
|
+
self.minyuryokuAlert()
|
55
|
+
}
|
56
|
+
if emailAddressField.text == "" {
|
57
|
+
self.minyuryokuAlert()
|
58
|
+
}
|
59
|
+
//入力欄が空欄だったらエラーを表示。全て入力されていたら保存
|
60
|
+
if nameField.text != "" && givenNameField.text != "" && phoneNumberField.text != "" && emailAddressField.text != "" {
|
61
|
+
//名前
|
62
|
+
let myname = nameField.text!
|
63
|
+
newcontact.givenName = myname
|
64
|
+
//苗字
|
65
|
+
let myFamilyName = givenNameField.text!
|
66
|
+
newcontact.familyName = myFamilyName
|
67
|
+
//メアド
|
68
|
+
let myemail = emailAddressField.text! as NSString
|
69
|
+
let myEmail = CNLabeledValue(label:CNLabelHome, value:NSString(string: myemail))
|
70
|
+
newcontact.emailAddresses = [myEmail]
|
71
|
+
//番号
|
72
|
+
let myphoneNo = phoneNumberField.text!
|
73
|
+
newcontact.phoneNumbers = [CNLabeledValue(
|
74
|
+
label:CNLabelPhoneNumberiPhone,
|
75
|
+
value:CNPhoneNumber(stringValue: myphoneNo))]
|
76
|
+
|
77
|
+
print("お名前:(newcontact.givenName)")
|
78
|
+
print("苗字:(newcontact.familyName)")
|
79
|
+
print("メアド:(newcontact.emailAddresses)")
|
80
|
+
print("番号:(newcontact.phoneNumbers)")
|
81
|
+
|
82
|
+
//新しく作成した連絡先を保存
|
83
|
+
let saveRequest = CNSaveRequest()
|
84
|
+
saveRequest.add(newcontact, toContainerWithIdentifier: nil)
|
85
|
+
do{
|
86
|
+
//try store.execute(saveRequest)
|
87
|
+
try CNContactStore().execute(saveRequest)
|
88
|
+
print("保存したよ")
|
89
|
+
} catch {
|
90
|
+
print("保存失敗")
|
91
|
+
print(error)
|
92
|
+
}
|
93
|
+
} else {
|
94
|
+
self.minyuryokuAlert()
|
95
|
+
}
|
96
|
+
//初回時に連絡先へのアクセスを許可するかのメッセージを表示する
|
97
|
+
let picker = CNContactPickerViewController()
|
98
|
+
picker.delegate = self
|
99
|
+
self.present(picker, animated: true, completion: nil)
|
100
|
+
}
|
26
101
|
func contactPickerDidCancel(_ picker: CNContactPickerViewController) {
|
27
102
|
print("ContactPickerキャンセルしたよ")
|
28
103
|
}
|
@@ -37,19 +112,23 @@
|
|
37
112
|
title:"選択した人",
|
38
113
|
message: "",
|
39
114
|
preferredStyle: .alert)
|
40
|
-
//アラートにアクション追加
|
115
|
+
//アラートにアクション追加(アクション名は選択した人達)
|
41
116
|
for i in 0..<mycount {
|
42
117
|
alert.addAction(
|
43
118
|
UIAlertAction(
|
44
119
|
title: "(nameList[i])",
|
45
120
|
style: .default,
|
46
121
|
handler: {(action) -> Void in
|
47
|
-
print("(self.nameList[i])")
|
48
|
-
//各人の情報をタプルから取
|
122
|
+
//各アクション(各人の情報をタプル配列から取りアラートで表示)
|
49
|
-
|
123
|
+
let kekkaAlert = UIAlertController(
|
50
|
-
|
124
|
+
title: self.target[i].name,
|
51
|
-
|
125
|
+
message: "(self.target[i].email)" + "\n" + "(self.target[i].phNo)",
|
52
|
-
|
126
|
+
preferredStyle:.alert)
|
127
|
+
kekkaAlert.addAction(UIAlertAction(title: "OK", style: .default))
|
128
|
+
self.present(kekkaAlert, animated: true, completion: nil)
|
129
|
+
print("target name = (self.target[i].name)")
|
130
|
+
print("target email = (self.target[i].email)")
|
131
|
+
print("target phoneNumber = (self.target[i].phNo)")
|
53
132
|
})
|
54
133
|
)
|
55
134
|
}
|
@@ -70,42 +149,24 @@
|
|
70
149
|
)
|
71
150
|
}
|
72
151
|
//「Done」ボタン押下で選択
|
73
|
-
|
152
|
+
func contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]){
|
74
|
-
//ここで選んだ複数人の情報をタプルで収納したいです。現在エラーになってしまう。
|
75
153
|
contacts.forEach { contact in
|
76
|
-
|
154
|
+
let names = contact.givenName + " " + contact.familyName
|
77
|
-
|
155
|
+
let emails = contact.emailAddresses
|
78
|
-
|
156
|
+
let phoneNo = contact.phoneNumbers
|
79
|
-
|
157
|
+
|
80
|
-
|
158
|
+
print("name is = (names)")
|
81
|
-
|
159
|
+
print("email is = (emails)")
|
82
|
-
|
160
|
+
print("phoneNo is = (phoneNo)")
|
83
|
-
|
161
|
+
nameList.append(names)
|
84
|
-
|
162
|
+
//タプルの配列"target"に入れる
|
85
|
-
|
163
|
+
target.append((name:names,email:emails,phNo:phoneNo))
|
164
|
+
print("(target)")
|
86
165
|
}
|
87
166
|
let count = nameList.count
|
88
167
|
print("nameList = (nameList)")
|
89
168
|
displayNameList(mycount:count)
|
90
|
-
|
91
169
|
}
|
92
|
-
//func contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]){
|
93
|
-
// contacts.forEach { contact in
|
94
|
-
// let names = contact.givenName + " " + contact.familyName
|
95
|
-
// let emails = CNContactProperty.value?.description
|
96
|
-
// let phoneNo = contact.phoneNumbers
|
97
|
-
//
|
98
|
-
// print("name is = (names)")
|
99
|
-
// print("email is = (emails)")
|
100
|
-
// print("phoneNo is = (phoneNo)")
|
101
|
-
// nameList.append(names)
|
102
|
-
// //タプルの配列"target"に入れる
|
103
|
-
// target.append((name:names,email:emails,phNo:phoneNo))
|
104
|
-
// }
|
105
|
-
// let count = nameList.count
|
106
|
-
// print("nameList = (nameList)")
|
107
|
-
// displayNameList(mycount:count)
|
108
|
-
//}
|
109
170
|
//「一覧」ボタンを押下。連絡先を取得
|
110
171
|
@IBAction func getMyContact(_ sender: Any) {
|
111
172
|
nameList = []
|
@@ -116,22 +177,62 @@
|
|
116
177
|
cnPicker.delegate = self
|
117
178
|
self.present(cnPicker, animated: true, completion: nil)
|
118
179
|
|
119
|
-
}
|
180
|
+
}
|
181
|
+
|
182
|
+
//名前入力欄を消去
|
183
|
+
@IBAction func NameFieldDelete(_ sender: Any) {
|
184
|
+
nameField.text = ""
|
185
|
+
}
|
186
|
+
|
187
|
+
@IBAction func givenNameDelete(_ sender: Any) {
|
188
|
+
givenNameField.text = ""
|
189
|
+
}
|
190
|
+
//電話番号入力欄を消去
|
191
|
+
@IBAction func phoneNumFieldDelete(_ sender: Any) {
|
192
|
+
|
193
|
+
phoneNumberField.text = ""
|
194
|
+
}
|
195
|
+
func addAddressSave(){
|
196
|
+
|
197
|
+
}
|
198
|
+
//emailアドレス入力欄を消去
|
199
|
+
@IBAction func emailFieldDelete(_ sender: Any) {
|
200
|
+
emailAddressField.text = ""
|
201
|
+
}
|
202
|
+
|
120
203
|
override func viewDidLoad() {
|
121
204
|
super.viewDidLoad()
|
122
205
|
|
123
206
|
}
|
207
|
+
|
124
208
|
override func didReceiveMemoryWarning() {
|
125
209
|
super.didReceiveMemoryWarning()
|
126
210
|
// Dispose of any resources that can be recreated.
|
127
211
|
}
|
212
|
+
////キーボードに閉じるボタンをつける
|
213
|
+
func makeKeyboard(){
|
214
|
+
//仮のサイズでツールバー作成
|
215
|
+
let kbToolBar = UIToolbar(frame: CGRect(x: 0,y: 0, width: 320, height: 40))
|
216
|
+
kbToolBar.barStyle = UIBarStyle.default //スタイル設定
|
217
|
+
kbToolBar.sizeToFit() //画面に合わせてサイズ調整
|
218
|
+
//スペーサー
|
219
|
+
let spacer = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.fixedSpace, target: self, action: nil)
|
220
|
+
//閉じるボタン
|
221
|
+
let commitButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: self, action: #selector(ViewController.commitButtonTapped))
|
222
|
+
kbToolBar.items = [spacer, commitButton]
|
223
|
+
nameField.inputAccessoryView = kbToolBar
|
224
|
+
phoneNumberField.inputAccessoryView = kbToolBar
|
225
|
+
emailAddressField.inputAccessoryView = kbToolBar
|
226
|
+
givenNameField.inputAccessoryView = kbToolBar
|
227
|
+
|
228
|
+
}
|
128
|
-
|
229
|
+
@objc func commitButtonTapped(){
|
129
230
|
self.view.endEditing(true)
|
130
231
|
}
|
131
232
|
|
132
233
|
}
|
133
|
-
|
134
234
|
```
|
135
|
-
|
136
|
-

|
137
|
-

|
237
|
+

|
238
|
+

|
1
コードを書き換えました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -8,27 +8,28 @@
|
|
8
8
|
②までは、なんとかできたのですがその先が分かりません。
|
9
9
|
また**ViewControllerに戻って再度「取得」ボタンを押して連絡先一覧を開くと
|
10
10
|
チェックが消えていません。**
|
11
|
+
[CNLabeledValue<NSString>]のメールアドレスをStringに変換することはできないのでしょうか?
|
11
12
|
```ここに言語を入力
|
12
|
-
//
|
13
|
-
// ViewController.swift
|
14
|
-
// ToAdressBook
|
15
|
-
//
|
16
|
-
// Created by admin on 2017/11/13.
|
17
|
-
// Copyright © 2017年 css. All rights reserved.
|
18
|
-
//
|
19
|
-
|
20
13
|
import UIKit
|
21
14
|
import Contacts
|
22
15
|
import ContactsUI
|
23
|
-
|
24
16
|
class ViewController: UIViewController, CNContactPickerDelegate, CNContactViewControllerDelegate {
|
25
|
-
var nameList:[String] = []
|
26
|
-
let cnPicker = CNContactPickerViewController()
|
27
17
|
|
18
|
+
@IBOutlet weak var nameField: UITextField!
|
19
|
+
@IBOutlet weak var phoneNumberField: UITextField!
|
20
|
+
@IBOutlet weak var emailAddressField: UITextField!
|
21
|
+
@IBOutlet weak var givenNameField: UITextField!
|
22
|
+
var target: [(name:String,email:[CNLabeledValue<NSString>],phNo:CNLabeledValue<CNPhoneNumber>)] = []
|
23
|
+
var nameList:[String] = []
|
24
|
+
let cnPicker = CNContactPickerViewController()
|
25
|
+
|
26
|
+
func contactPickerDidCancel(_ picker: CNContactPickerViewController) {
|
27
|
+
print("ContactPickerキャンセルしたよ")
|
28
|
+
}
|
29
|
+
|
28
30
|
//選んた人をアラートで表示
|
29
31
|
func displayNameList(mycount:Int){
|
30
32
|
print("飛んだよ")
|
31
|
-
//ここが不安
|
32
33
|
self.cnPicker.dismiss(animated: false) {
|
33
34
|
print("閉じたよ?")
|
34
35
|
}
|
@@ -36,7 +37,7 @@
|
|
36
37
|
title:"選択した人",
|
37
38
|
message: "",
|
38
39
|
preferredStyle: .alert)
|
39
|
-
//アラートにアクション追加
|
40
|
+
//アラートにアクション追加
|
40
41
|
for i in 0..<mycount {
|
41
42
|
alert.addAction(
|
42
43
|
UIAlertAction(
|
@@ -44,8 +45,11 @@
|
|
44
45
|
style: .default,
|
45
46
|
handler: {(action) -> Void in
|
46
47
|
print("(self.nameList[i])")
|
47
|
-
|
48
|
-
|
48
|
+
//各人の情報をタプルから取得
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
|
49
53
|
})
|
50
54
|
)
|
51
55
|
}
|
@@ -65,18 +69,43 @@
|
|
65
69
|
}
|
66
70
|
)
|
67
71
|
}
|
68
|
-
//「Done」ボタン押下で選択
|
72
|
+
//「Done」ボタン押下で選択
|
69
|
-
func contactPicker(_ picker: CNContactPickerViewController,
|
73
|
+
private func contactPicker(_ picker: CNContactPickerViewController, didSelectContactProperty contacts: CNContactProperty){
|
74
|
+
//ここで選んだ複数人の情報をタプルで収納したいです。現在エラーになってしまう。
|
70
75
|
contacts.forEach { contact in
|
71
|
-
let names = contact.
|
76
|
+
let names = contact.givenName + " " + contact.familyName
|
77
|
+
let emails = CNContactProperty.value?.description
|
78
|
+
let phoneNo = contact.phoneNumbers
|
79
|
+
|
72
80
|
print("name is = (names)")
|
81
|
+
print("email is = (emails)")
|
82
|
+
print("phoneNo is = (phoneNo)")
|
73
83
|
nameList.append(names)
|
84
|
+
//タプルの配列"target"に入れる
|
85
|
+
target.append((name:names,email:emails,phNo:phoneNo))
|
74
86
|
}
|
75
87
|
let count = nameList.count
|
76
88
|
print("nameList = (nameList)")
|
77
89
|
displayNameList(mycount:count)
|
78
|
-
|
90
|
+
|
79
91
|
}
|
92
|
+
//func contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]){
|
93
|
+
// contacts.forEach { contact in
|
94
|
+
// let names = contact.givenName + " " + contact.familyName
|
95
|
+
// let emails = CNContactProperty.value?.description
|
96
|
+
// let phoneNo = contact.phoneNumbers
|
97
|
+
//
|
98
|
+
// print("name is = (names)")
|
99
|
+
// print("email is = (emails)")
|
100
|
+
// print("phoneNo is = (phoneNo)")
|
101
|
+
// nameList.append(names)
|
102
|
+
// //タプルの配列"target"に入れる
|
103
|
+
// target.append((name:names,email:emails,phNo:phoneNo))
|
104
|
+
// }
|
105
|
+
// let count = nameList.count
|
106
|
+
// print("nameList = (nameList)")
|
107
|
+
// displayNameList(mycount:count)
|
108
|
+
//}
|
80
109
|
//「一覧」ボタンを押下。連絡先を取得
|
81
110
|
@IBAction func getMyContact(_ sender: Any) {
|
82
111
|
nameList = []
|
@@ -87,26 +116,21 @@
|
|
87
116
|
cnPicker.delegate = self
|
88
117
|
self.present(cnPicker, animated: true, completion: nil)
|
89
118
|
|
90
|
-
}
|
119
|
+
}
|
91
|
-
|
92
|
-
|
93
120
|
override func viewDidLoad() {
|
94
121
|
super.viewDidLoad()
|
95
122
|
|
96
123
|
}
|
97
|
-
|
98
124
|
override func didReceiveMemoryWarning() {
|
99
125
|
super.didReceiveMemoryWarning()
|
100
126
|
// Dispose of any resources that can be recreated.
|
101
127
|
}
|
102
|
-
|
103
|
-
|
128
|
+
@objc func commitButtonTapped(){
|
104
129
|
self.view.endEditing(true)
|
105
130
|
}
|
106
131
|
|
107
132
|
}
|
108
133
|
|
109
|
-
|
110
134
|
```
|
111
135
|
|
112
136
|

|