arc200-client 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,298 +1,311 @@
1
- // contracts/clients/Arc200Client.ts
2
- import * as algokit from "@algorandfoundation/algokit-utils";
3
- import { AtomicTransactionComposer, modelsv2 } from "algosdk";
1
+ // contracts/artifacts/Arc200Client.ts
2
+ import {
3
+ getArc56ReturnValue,
4
+ getABIStructFromABITuple
5
+ } from "@algorandfoundation/algokit-utils/types/app-arc56";
6
+ import {
7
+ AppClient as _AppClient
8
+ } from "@algorandfoundation/algokit-utils/types/app-client";
9
+ import {
10
+ AppFactory as _AppFactory
11
+ } from "@algorandfoundation/algokit-utils/types/app-factory";
4
12
  var APP_SPEC = {
5
- "hints": {
6
- "arc200_name()string": {
7
- "call_config": {
8
- "no_op": "CALL"
9
- }
13
+ name: "Arc200",
14
+ structs: {
15
+ ApprovalStruct: [
16
+ { name: "approvalAmount", type: "uint256" },
17
+ { name: "owner", type: "address" },
18
+ { name: "spender", type: "address" }
19
+ ]
20
+ },
21
+ methods: [
22
+ {
23
+ name: "bootstrap",
24
+ args: [
25
+ { type: "byte[]", name: "name" },
26
+ { type: "byte[]", name: "symbol" },
27
+ { type: "uint8", name: "decimals" },
28
+ { type: "uint256", name: "totalSupply" }
29
+ ],
30
+ returns: { type: "bool" },
31
+ actions: { create: [], call: ["NoOp"] },
32
+ readonly: false,
33
+ events: [
34
+ {
35
+ name: "arc200_Transfer",
36
+ args: [
37
+ { type: "address", name: "from" },
38
+ { type: "address", name: "to" },
39
+ { type: "uint256", name: "value" }
40
+ ]
41
+ }
42
+ ],
43
+ recommendations: {}
10
44
  },
11
- "arc200_symbol()string": {
12
- "call_config": {
13
- "no_op": "CALL"
14
- }
45
+ {
46
+ name: "arc200_name",
47
+ args: [],
48
+ returns: { type: "byte[32]", desc: "The name of the token" },
49
+ actions: { create: [], call: ["NoOp"] },
50
+ readonly: true,
51
+ desc: "Returns the name of the token",
52
+ events: [],
53
+ recommendations: {}
15
54
  },
16
- "arc200_decimals()uint8": {
17
- "call_config": {
18
- "no_op": "CALL"
19
- }
55
+ {
56
+ name: "arc200_symbol",
57
+ args: [],
58
+ returns: { type: "byte[8]", desc: "The symbol of the token" },
59
+ actions: { create: [], call: ["NoOp"] },
60
+ readonly: true,
61
+ desc: "Returns the symbol of the token",
62
+ events: [],
63
+ recommendations: {}
20
64
  },
21
- "arc200_totalSupply()uint256": {
22
- "call_config": {
23
- "no_op": "CALL"
24
- }
65
+ {
66
+ name: "arc200_decimals",
67
+ args: [],
68
+ returns: { type: "uint8", desc: "The decimals of the token" },
69
+ actions: { create: [], call: ["NoOp"] },
70
+ readonly: true,
71
+ desc: "Returns the decimals of the token",
72
+ events: [],
73
+ recommendations: {}
25
74
  },
26
- "arc200_balanceOf(address)uint256": {
27
- "call_config": {
28
- "no_op": "CALL"
29
- }
75
+ {
76
+ name: "arc200_totalSupply",
77
+ args: [],
78
+ returns: { type: "uint256", desc: "The total supply of the token" },
79
+ actions: { create: [], call: ["NoOp"] },
80
+ readonly: true,
81
+ desc: "Returns the total supply of the token",
82
+ events: [],
83
+ recommendations: {}
30
84
  },
31
- "arc200_transfer(address,uint256)bool": {
32
- "call_config": {
33
- "no_op": "CALL"
34
- }
85
+ {
86
+ name: "arc200_balanceOf",
87
+ args: [{ type: "address", name: "owner", desc: "The address of the owner of the token" }],
88
+ returns: { type: "uint256", desc: "The current balance of the holder of the token" },
89
+ actions: { create: [], call: ["NoOp"] },
90
+ readonly: true,
91
+ desc: "Returns the current balance of the owner of the token",
92
+ events: [],
93
+ recommendations: {}
35
94
  },
36
- "arc200_transferFrom(address,address,uint256)bool": {
37
- "call_config": {
38
- "no_op": "CALL"
39
- }
95
+ {
96
+ name: "arc200_transfer",
97
+ args: [
98
+ { type: "address", name: "to", desc: "The destination of the transfer" },
99
+ { type: "uint256", name: "value", desc: "Amount of tokens to transfer" }
100
+ ],
101
+ returns: { type: "bool", desc: "Success" },
102
+ actions: { create: [], call: ["NoOp"] },
103
+ readonly: false,
104
+ desc: "Transfers tokens",
105
+ events: [
106
+ {
107
+ name: "arc200_Transfer",
108
+ args: [
109
+ { type: "address", name: "from" },
110
+ { type: "address", name: "to" },
111
+ { type: "uint256", name: "value" }
112
+ ]
113
+ }
114
+ ],
115
+ recommendations: {}
40
116
  },
41
- "arc200_approve(address,uint256)bool": {
42
- "call_config": {
43
- "no_op": "CALL"
44
- }
117
+ {
118
+ name: "arc200_transferFrom",
119
+ args: [
120
+ { type: "address", name: "from", desc: "The source of the transfer" },
121
+ { type: "address", name: "to", desc: "The destination of the transfer" },
122
+ { type: "uint256", name: "value", desc: "Amount of tokens to transfer" }
123
+ ],
124
+ returns: { type: "bool", desc: "Success" },
125
+ actions: { create: [], call: ["NoOp"] },
126
+ readonly: false,
127
+ desc: "Transfers tokens from source to destination as approved spender",
128
+ events: [
129
+ {
130
+ name: "arc200_Approval",
131
+ args: [
132
+ { type: "address", name: "owner" },
133
+ { type: "address", name: "spender" },
134
+ { type: "uint256", name: "value" }
135
+ ]
136
+ },
137
+ {
138
+ name: "arc200_Transfer",
139
+ args: [
140
+ { type: "address", name: "from" },
141
+ { type: "address", name: "to" },
142
+ { type: "uint256", name: "value" }
143
+ ]
144
+ }
145
+ ],
146
+ recommendations: {}
45
147
  },
46
- "arc200_allowance(address,address)uint256": {
47
- "call_config": {
48
- "no_op": "CALL"
49
- }
148
+ {
149
+ name: "arc200_approve",
150
+ args: [
151
+ { type: "address", name: "spender", desc: "Who is allowed to take tokens on owner's behalf" },
152
+ { type: "uint256", name: "value", desc: "Amount of tokens to be taken by spender" }
153
+ ],
154
+ returns: { type: "bool", desc: "Success" },
155
+ actions: { create: [], call: ["NoOp"] },
156
+ readonly: false,
157
+ desc: "Approve spender for a token",
158
+ events: [
159
+ {
160
+ name: "arc200_Approval",
161
+ args: [
162
+ { type: "address", name: "owner" },
163
+ { type: "address", name: "spender" },
164
+ { type: "uint256", name: "value" }
165
+ ]
166
+ }
167
+ ],
168
+ recommendations: {}
50
169
  },
51
- "createApplication()void": {
52
- "call_config": {
53
- "no_op": "CREATE"
54
- }
170
+ {
171
+ name: "arc200_allowance",
172
+ args: [
173
+ { type: "address", name: "owner", desc: "Owner's account" },
174
+ { type: "address", name: "spender", desc: "Who is allowed to take tokens on owner's behalf" }
175
+ ],
176
+ returns: { type: "uint256", desc: "The remaining allowance" },
177
+ actions: { create: [], call: ["NoOp"] },
178
+ readonly: true,
179
+ desc: "Returns the current allowance of the spender of the tokens of the owner",
180
+ events: [],
181
+ recommendations: {}
55
182
  }
56
- },
57
- "bare_call_config": {
58
- "no_op": "NEVER",
59
- "opt_in": "NEVER",
60
- "close_out": "NEVER",
61
- "update_application": "NEVER",
62
- "delete_application": "NEVER"
63
- },
64
- "schema": {
65
- "local": {
66
- "declared": {},
67
- "reserved": {}
183
+ ],
184
+ arcs: [22, 28],
185
+ desc: "Smart Contract Token Base Interface",
186
+ networks: {},
187
+ state: {
188
+ schema: { global: { ints: 0, bytes: 4 }, local: { ints: 0, bytes: 0 } },
189
+ keys: {
190
+ global: {
191
+ name: { keyType: "AVMString", valueType: "byte[]", key: "bg==", desc: "Name of the asset. Max 32 bytes" },
192
+ symbol: { keyType: "AVMString", valueType: "byte[]", key: "cw==", desc: "Symbol of the asset. Max 8 bytes" },
193
+ decimals: {
194
+ keyType: "AVMString",
195
+ valueType: "uint8",
196
+ key: "ZA==",
197
+ desc: "Decimals of the asset. Recommended is 6 decimal places."
198
+ },
199
+ totalSupply: { keyType: "AVMString", valueType: "uint256", key: "dA==", desc: "Minted supply" }
200
+ },
201
+ local: {},
202
+ box: {}
68
203
  },
69
- "global": {
70
- "declared": {},
71
- "reserved": {}
204
+ maps: {
205
+ global: {},
206
+ local: {},
207
+ box: {
208
+ balances: { keyType: "address", valueType: "uint256", prefix: "Yg==" },
209
+ approvals: { keyType: "byte[32]", valueType: "ApprovalStruct", prefix: "YQ==" }
210
+ }
72
211
  }
73
212
  },
74
- "state": {
75
- "global": {
76
- "num_byte_slices": 0,
77
- "num_uints": 0
213
+ bareActions: { create: ["NoOp"], call: [] },
214
+ sourceInfo: {
215
+ approval: {
216
+ sourceInfo: [
217
+ { pc: [589, 706], errorMessage: "Box must have value" },
218
+ { pc: [707], errorMessage: "Index access is out of bounds" },
219
+ { pc: [610], errorMessage: "Insufficient balance at the sender account" },
220
+ { pc: [369], errorMessage: "Name of the asset must be longer or equal to 1 character" },
221
+ { pc: [372], errorMessage: "Name of the asset must be shorter or equal to 32 characters" },
222
+ { pc: [145, 167, 189, 214, 236, 255, 271, 287, 303, 319], errorMessage: "OnCompletion is not NoOp" },
223
+ { pc: [363], errorMessage: "Only deployer of this smart contract can call bootstrap method" },
224
+ { pc: [378], errorMessage: "Symbol of the asset must be longer or equal to 1 character" },
225
+ { pc: [381], errorMessage: "Symbol of the asset must be shorter or equal to 8 characters" },
226
+ { pc: [388], errorMessage: "This method can be called only once" },
227
+ { pc: [352], errorMessage: "can only call when creating" },
228
+ { pc: [148, 170, 192, 217, 239, 258, 274, 290, 306, 322], errorMessage: "can only call when not creating" },
229
+ { pc: [439, 454, 469, 474], errorMessage: "check GlobalState exists" },
230
+ { pc: [514], errorMessage: "insufficient approval" },
231
+ { pc: [447, 462, 675], errorMessage: "invalid size" },
232
+ { pc: [522, 628], errorMessage: "overflow" }
233
+ ],
234
+ pcOffsetMethod: "none"
78
235
  },
79
- "local": {
80
- "num_byte_slices": 0,
81
- "num_uints": 0
82
- }
236
+ clear: { sourceInfo: [], pcOffsetMethod: "none" }
83
237
  },
84
- "source": {
85
- "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjg0LjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBhcmMyMDBfbmFtZSgpc3RyaW5nCiphYmlfcm91dGVfYXJjMjAwX25hbWU6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgYXJjMjAwX25hbWUoKXN0cmluZwoJY2FsbHN1YiBhcmMyMDBfbmFtZQoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmMyMDBfbmFtZSgpOiBzdHJpbmdbMzJdCi8vCi8vIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHRva2VuCi8vCi8vIEByZXR1cm5zIFRoZSBuYW1lIG9mIHRoZSB0b2tlbgphcmMyMDBfbmFtZToKCXByb3RvIDAgMQoKCS8vIGNvbnRyYWN0c1xhcmMyMDAuYWxnby50czoxNQoJLy8gcmV0dXJuICdBcmMyMDAnOwoJYnl0ZSAweDQxNzI2MzMyMzAzMCAvLyAiQXJjMjAwIgoJcmV0c3ViCgovLyBhcmMyMDBfc3ltYm9sKClzdHJpbmcKKmFiaV9yb3V0ZV9hcmMyMDBfc3ltYm9sOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIGFyYzIwMF9zeW1ib2woKXN0cmluZwoJY2FsbHN1YiBhcmMyMDBfc3ltYm9sCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF9zeW1ib2woKTogc3RyaW5nWzhdCi8vCi8vIFJldHVybnMgdGhlIHN5bWJvbCBvZiB0aGUgdG9rZW4KLy8KLy8gQHJldHVybnMgVGhlIHN5bWJvbCBvZiB0aGUgdG9rZW4KYXJjMjAwX3N5bWJvbDoKCXByb3RvIDAgMQoKCS8vIGNvbnRyYWN0c1xhcmMyMDAuYWxnby50czoyNQoJLy8gcmV0dXJuICdBcmMyMDAnOwoJYnl0ZSAweDQxNzI2MzMyMzAzMCAvLyAiQXJjMjAwIgoJcmV0c3ViCgovLyBhcmMyMDBfZGVjaW1hbHMoKXVpbnQ4CiphYmlfcm91dGVfYXJjMjAwX2RlY2ltYWxzOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIGFyYzIwMF9kZWNpbWFscygpdWludDgKCWNhbGxzdWIgYXJjMjAwX2RlY2ltYWxzCglpdG9iCglkdXAKCWJpdGxlbgoJaW50IDgKCTw9Cglhc3NlcnQKCWV4dHJhY3QgNyAxCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX2RlY2ltYWxzKCk6IHVpbnQ4Ci8vCi8vIFJldHVybnMgdGhlIGRlY2ltYWxzIG9mIHRoZSB0b2tlbgovLwovLyBAcmV0dXJucyBUaGUgZGVjaW1hbHMgb2YgdGhlIHRva2VuCmFyYzIwMF9kZWNpbWFsczoKCXByb3RvIDAgMQoKCS8vIGNvbnRyYWN0c1xhcmMyMDAuYWxnby50czozNQoJLy8gcmV0dXJuIDYgYXMgdWludDg7CglpbnQgNgoJcmV0c3ViCgovLyBhcmMyMDBfdG90YWxTdXBwbHkoKXVpbnQyNTYKKmFiaV9yb3V0ZV9hcmMyMDBfdG90YWxTdXBwbHk6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgYXJjMjAwX3RvdGFsU3VwcGx5KCl1aW50MjU2CgljYWxsc3ViIGFyYzIwMF90b3RhbFN1cHBseQoJZHVwCgliaXRsZW4KCWludCAyNTYKCTw9Cglhc3NlcnQKCWJ5dGUgMHhGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDMyCgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX3RvdGFsU3VwcGx5KCk6IHVpbnQyNTYKLy8KLy8gUmV0dXJucyB0aGUgdG90YWwgc3VwcGx5IG9mIHRoZSB0b2tlbgovLwovLyBAcmV0dXJucyBUaGUgdG90YWwgc3VwcGx5IG9mIHRoZSB0b2tlbgphcmMyMDBfdG90YWxTdXBwbHk6Cglwcm90byAwIDEKCgkvLyBjb250cmFjdHNcYXJjMjAwLmFsZ28udHM6NDUKCS8vIHJldHVybiAxXzAwMF8wMDBfMDAwXzAwMF8wMDAgYXMgdWludDI1NjsKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOGQ3ZWE0YzY4MDAwCglyZXRzdWIKCi8vIGFyYzIwMF9iYWxhbmNlT2YoYWRkcmVzcyl1aW50MjU2CiphYmlfcm91dGVfYXJjMjAwX2JhbGFuY2VPZjoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gb3duZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzIwMF9iYWxhbmNlT2YoYWRkcmVzcyl1aW50MjU2CgljYWxsc3ViIGFyYzIwMF9iYWxhbmNlT2YKCWR1cAoJYml0bGVuCglpbnQgMjU2Cgk8PQoJYXNzZXJ0CglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRgoJYiYKCWR1cAoJbGVuCglkdXAKCWludCAzMgoJLQoJc3dhcAoJc3Vic3RyaW5nMwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF9iYWxhbmNlT2Yob3duZXI6IEFkZHJlc3MpOiB1aW50MjU2Ci8vCi8vIFJldHVybnMgdGhlIGN1cnJlbnQgYmFsYW5jZSBvZiB0aGUgb3duZXIgb2YgdGhlIHRva2VuCi8vCi8vIEBwYXJhbSBvd25lciBUaGUgYWRkcmVzcyBvZiB0aGUgb3duZXIgb2YgdGhlIHRva2VuCi8vIEByZXR1cm5zIFRoZSBjdXJyZW50IGJhbGFuY2Ugb2YgdGhlIGhvbGRlciBvZiB0aGUgdG9rZW4KYXJjMjAwX2JhbGFuY2VPZjoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0c1xhcmMyMDAuYWxnby50czo1NgoJLy8gcmV0dXJuIDAgYXMgdWludDI1NjsKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCglyZXRzdWIKCi8vIGFyYzIwMF90cmFuc2ZlcihhZGRyZXNzLHVpbnQyNTYpYm9vbAoqYWJpX3JvdXRlX2FyYzIwMF90cmFuc2ZlcjoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gdmFsdWU6IHVpbnQyNTYKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyB0bzogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjMjAwX3RyYW5zZmVyKGFkZHJlc3MsdWludDI1Nilib29sCgljYWxsc3ViIGFyYzIwMF90cmFuc2ZlcgoJYnl0ZSAweDAwCglpbnQgMAoJdW5jb3ZlciAyCglzZXRiaXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmMyMDBfdHJhbnNmZXIodG86IEFkZHJlc3MsIHZhbHVlOiB1aW50MjU2KTogYm9vbGVhbgovLwovLyBUcmFuc2ZlcnMgdG9rZW5zCi8vCi8vIEBwYXJhbSB0byBUaGUgZGVzdGluYXRpb24gb2YgdGhlIHRyYW5zZmVyCi8vIEBwYXJhbSB2YWx1ZSBBbW91bnQgb2YgdG9rZW5zIHRvIHRyYW5zZmVyCi8vIEByZXR1cm5zIFN1Y2Nlc3MKYXJjMjAwX3RyYW5zZmVyOgoJcHJvdG8gMiAxCgoJLy8gY29udHJhY3RzXGFyYzIwMC5hbGdvLnRzOjY3CgkvLyByZXR1cm4gZmFsc2U7CglpbnQgMAoJcmV0c3ViCgovLyBhcmMyMDBfdHJhbnNmZXJGcm9tKGFkZHJlc3MsYWRkcmVzcyx1aW50MjU2KWJvb2wKKmFiaV9yb3V0ZV9hcmMyMDBfdHJhbnNmZXJGcm9tOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyB2YWx1ZTogdWludDI1NgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIHRvOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZnJvbTogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjMjAwX3RyYW5zZmVyRnJvbShhZGRyZXNzLGFkZHJlc3MsdWludDI1Nilib29sCgljYWxsc3ViIGFyYzIwMF90cmFuc2ZlckZyb20KCWJ5dGUgMHgwMAoJaW50IDAKCXVuY292ZXIgMgoJc2V0Yml0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX3RyYW5zZmVyRnJvbShmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzcywgdmFsdWU6IHVpbnQyNTYpOiBib29sZWFuCi8vCi8vIFRyYW5zZmVycyB0b2tlbnMgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24gYXMgYXBwcm92ZWQgc3BlbmRlcgovLwovLyBAcGFyYW0gZnJvbSBUaGUgc291cmNlIG9mIHRoZSB0cmFuc2ZlcgovLyBAcGFyYW0gdG8gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSB0cmFuc2ZlcgovLyBAcGFyYW0gdmFsdWUgQW1vdW50IG9mIHRva2VucyB0byB0cmFuc2ZlcgovLyBAcmV0dXJucyBTdWNjZXNzCmFyYzIwMF90cmFuc2ZlckZyb206Cglwcm90byAzIDEKCgkvLyBjb250cmFjdHNcYXJjMjAwLmFsZ28udHM6NzkKCS8vIHJldHVybiBmYWxzZTsKCWludCAwCglyZXRzdWIKCi8vIGFyYzIwMF9hcHByb3ZlKGFkZHJlc3MsdWludDI1Nilib29sCiphYmlfcm91dGVfYXJjMjAwX2FwcHJvdmU6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHZhbHVlOiB1aW50MjU2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gc3BlbmRlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjMjAwX2FwcHJvdmUoYWRkcmVzcyx1aW50MjU2KWJvb2wKCWNhbGxzdWIgYXJjMjAwX2FwcHJvdmUKCWJ5dGUgMHgwMAoJaW50IDAKCXVuY292ZXIgMgoJc2V0Yml0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX2FwcHJvdmUoc3BlbmRlcjogQWRkcmVzcywgdmFsdWU6IHVpbnQyNTYpOiBib29sZWFuCi8vCi8vIEFwcHJvdmUgc3BlbmRlciBmb3IgYSB0b2tlbgovLwovLyBAcGFyYW0gc3BlbmRlciBXaG8gaXMgYWxsb3dlZCB0byB0YWtlIHRva2VucyBvbiBvd25lcidzIGJlaGFsZgovLyBAcGFyYW0gdmFsdWUgQW1vdW50IG9mIHRva2VucyB0byBiZSB0YWtlbiBieSBzcGVuZGVyCi8vIEByZXR1cm5zIFN1Y2Nlc3MKYXJjMjAwX2FwcHJvdmU6Cglwcm90byAyIDEKCgkvLyBjb250cmFjdHNcYXJjMjAwLmFsZ28udHM6OTAKCS8vIHJldHVybiBmYWxzZTsKCWludCAwCglyZXRzdWIKCi8vIGFyYzIwMF9hbGxvd2FuY2UoYWRkcmVzcyxhZGRyZXNzKXVpbnQyNTYKKmFiaV9yb3V0ZV9hcmMyMDBfYWxsb3dhbmNlOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBzcGVuZGVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gb3duZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzIwMF9hbGxvd2FuY2UoYWRkcmVzcyxhZGRyZXNzKXVpbnQyNTYKCWNhbGxzdWIgYXJjMjAwX2FsbG93YW5jZQoJZHVwCgliaXRsZW4KCWludCAyNTYKCTw9Cglhc3NlcnQKCWJ5dGUgMHhGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDMyCgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX2FsbG93YW5jZShvd25lcjogQWRkcmVzcywgc3BlbmRlcjogQWRkcmVzcyk6IHVpbnQyNTYKLy8KLy8gUmV0dXJucyB0aGUgY3VycmVudCBhbGxvd2FuY2Ugb2YgdGhlIHNwZW5kZXIgb2YgdGhlIHRva2VucyBvZiB0aGUgb3duZXIKLy8KLy8gQHBhcmFtIG93bmVyIE93bmVyJ3MgYWNjb3VudAovLyBAcGFyYW0gc3BlbmRlciBXaG8gaXMgYWxsb3dlZCB0byB0YWtlIHRva2VucyBvbiBvd25lcidzIGJlaGFsZgovLyBAcmV0dXJucyBUaGUgcmVtYWluaW5nIGFsbG93YW5jZQphcmMyMDBfYWxsb3dhbmNlOgoJcHJvdG8gMiAxCgoJLy8gY29udHJhY3RzXGFyYzIwMC5hbGdvLnRzOjEwMgoJLy8gcmV0dXJuIDAgYXMgdWludDI1NjsKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnQgMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJhcmMyMDBfbmFtZSgpc3RyaW5nIgoJbWV0aG9kICJhcmMyMDBfc3ltYm9sKClzdHJpbmciCgltZXRob2QgImFyYzIwMF9kZWNpbWFscygpdWludDgiCgltZXRob2QgImFyYzIwMF90b3RhbFN1cHBseSgpdWludDI1NiIKCW1ldGhvZCAiYXJjMjAwX2JhbGFuY2VPZihhZGRyZXNzKXVpbnQyNTYiCgltZXRob2QgImFyYzIwMF90cmFuc2ZlcihhZGRyZXNzLHVpbnQyNTYpYm9vbCIKCW1ldGhvZCAiYXJjMjAwX3RyYW5zZmVyRnJvbShhZGRyZXNzLGFkZHJlc3MsdWludDI1Nilib29sIgoJbWV0aG9kICJhcmMyMDBfYXBwcm92ZShhZGRyZXNzLHVpbnQyNTYpYm9vbCIKCW1ldGhvZCAiYXJjMjAwX2FsbG93YW5jZShhZGRyZXNzLGFkZHJlc3MpdWludDI1NiIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjMjAwX25hbWUgKmFiaV9yb3V0ZV9hcmMyMDBfc3ltYm9sICphYmlfcm91dGVfYXJjMjAwX2RlY2ltYWxzICphYmlfcm91dGVfYXJjMjAwX3RvdGFsU3VwcGx5ICphYmlfcm91dGVfYXJjMjAwX2JhbGFuY2VPZiAqYWJpX3JvdXRlX2FyYzIwMF90cmFuc2ZlciAqYWJpX3JvdXRlX2FyYzIwMF90cmFuc2ZlckZyb20gKmFiaV9yb3V0ZV9hcmMyMDBfYXBwcm92ZSAqYWJpX3JvdXRlX2FyYzIwMF9hbGxvd2FuY2UKCWVycg==",
86
- "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw"
238
+ source: {
239
+ approval: "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDMyIDgKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAiYiIgInQiIDB4ODAgMHg3OTgzYzM1YyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo1MgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzIwMCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxNQogICAgcHVzaGJ5dGVzcyAweDk3NTM4MmUyIDB4NjU3ZDEzZWMgMHhiNmFlMWEyNSAweDg0ZWMxM2Q1IDB4ZWM5OTYwNDEgMHg4MmU1NzNjNCAweGRhNzAyNWI5IDB4NGE5NjhmOGYgMHhiNTQyMjEyNSAweGJiYjMxOWYzIC8vIG1ldGhvZCAiYm9vdHN0cmFwKGJ5dGVbXSxieXRlW10sdWludDgsdWludDI1Nilib29sIiwgbWV0aG9kICJhcmMyMDBfbmFtZSgpYnl0ZVszMl0iLCBtZXRob2QgImFyYzIwMF9zeW1ib2woKWJ5dGVbOF0iLCBtZXRob2QgImFyYzIwMF9kZWNpbWFscygpdWludDgiLCBtZXRob2QgImFyYzIwMF90b3RhbFN1cHBseSgpdWludDI1NiIsIG1ldGhvZCAiYXJjMjAwX2JhbGFuY2VPZihhZGRyZXNzKXVpbnQyNTYiLCBtZXRob2QgImFyYzIwMF90cmFuc2ZlcihhZGRyZXNzLHVpbnQyNTYpYm9vbCIsIG1ldGhvZCAiYXJjMjAwX3RyYW5zZmVyRnJvbShhZGRyZXNzLGFkZHJlc3MsdWludDI1Nilib29sIiwgbWV0aG9kICJhcmMyMDBfYXBwcm92ZShhZGRyZXNzLHVpbnQyNTYpYm9vbCIsIG1ldGhvZCAiYXJjMjAwX2FsbG93YW5jZShhZGRyZXNzLGFkZHJlc3MpdWludDI1NiIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fYm9vdHN0cmFwX3JvdXRlQDMgbWFpbl9hcmMyMDBfbmFtZV9yb3V0ZUA0IG1haW5fYXJjMjAwX3N5bWJvbF9yb3V0ZUA1IG1haW5fYXJjMjAwX2RlY2ltYWxzX3JvdXRlQDYgbWFpbl9hcmMyMDBfdG90YWxTdXBwbHlfcm91dGVANyBtYWluX2FyYzIwMF9iYWxhbmNlT2Zfcm91dGVAOCBtYWluX2FyYzIwMF90cmFuc2Zlcl9yb3V0ZUA5IG1haW5fYXJjMjAwX3RyYW5zZmVyRnJvbV9yb3V0ZUAxMCBtYWluX2FyYzIwMF9hcHByb3ZlX3JvdXRlQDExIG1haW5fYXJjMjAwX2FsbG93YW5jZV9yb3V0ZUAxMgoKbWFpbl9hZnRlcl9pZl9lbHNlQDE5OgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjUyCiAgICAvLyBleHBvcnQgY2xhc3MgQXJjMjAwIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9hcmMyMDBfYWxsb3dhbmNlX3JvdXRlQDEyOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE5NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjUyCiAgICAvLyBleHBvcnQgY2xhc3MgQXJjMjAwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE5NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgYXJjMjAwX2FsbG93YW5jZQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hcmMyMDBfYXBwcm92ZV9yb3V0ZUAxMToKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxODIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo1MgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzIwMCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxODIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFyYzIwMF9hcHByb3ZlCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzIwMF90cmFuc2ZlckZyb21fcm91dGVAMTA6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTY1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NTIKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmMyMDAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTY1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBhcmMyMDBfdHJhbnNmZXJGcm9tCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzIwMF90cmFuc2Zlcl9yb3V0ZUA5OgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE1MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjUyCiAgICAvLyBleHBvcnQgY2xhc3MgQXJjMjAwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE1MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYXJjMjAwX3RyYW5zZmVyCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzIwMF9iYWxhbmNlT2Zfcm91dGVAODoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo1MgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzIwMCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGFyYzIwMF9iYWxhbmNlT2YKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXJjMjAwX3RvdGFsU3VwcGx5X3JvdXRlQDc6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTI5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGFyYzIwMF90b3RhbFN1cHBseQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hcmMyMDBfZGVjaW1hbHNfcm91dGVANjoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYXJjMjAwX2RlY2ltYWxzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzIwMF9zeW1ib2xfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYXJjMjAwX3N5bWJvbAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hcmMyMDBfbmFtZV9yb3V0ZUA0OgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGFyYzIwMF9uYW1lCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Jvb3RzdHJhcF9yb3V0ZUAzOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjczCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NTIKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmMyMDAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGJvb3RzdHJhcAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMTU6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NTIKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmMyMDAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE5CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo6QXJjMjAwLmJvb3RzdHJhcChuYW1lOiBieXRlcywgc3ltYm9sOiBieXRlcywgZGVjaW1hbHM6IGJ5dGVzLCB0b3RhbFN1cHBseTogYnl0ZXMpIC0+IGJ5dGVzOgpib290c3RyYXA6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzMtNzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYm9vdHN0cmFwKG5hbWU6IER5bmFtaWNCeXRlcywgc3ltYm9sOiBEeW5hbWljQnl0ZXMsIGRlY2ltYWxzOiBVaW50TjgsIHRvdGFsU3VwcGx5OiBVaW50TjI1Nik6IEJvb2wgewogICAgcHJvdG8gNCAxCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzUKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSBHbG9iYWwuY3JlYXRvckFkZHJlc3MsICdPbmx5IGRlcGxveWVyIG9mIHRoaXMgc21hcnQgY29udHJhY3QgY2FuIGNhbGwgYm9vdHN0cmFwIG1ldGhvZCcpOwogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgZGVwbG95ZXIgb2YgdGhpcyBzbWFydCBjb250cmFjdCBjYW4gY2FsbCBib290c3RyYXAgbWV0aG9kCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzYKICAgIC8vIGFzc2VydChuYW1lLmxlbmd0aCA+IDAsICdOYW1lIG9mIHRoZSBhc3NldCBtdXN0IGJlIGxvbmdlciBvciBlcXVhbCB0byAxIGNoYXJhY3RlcicpOwogICAgZnJhbWVfZGlnIC00CiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgYXNzZXJ0IC8vIE5hbWUgb2YgdGhlIGFzc2V0IG11c3QgYmUgbG9uZ2VyIG9yIGVxdWFsIHRvIDEgY2hhcmFjdGVyCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzcKICAgIC8vIGFzc2VydChuYW1lLmxlbmd0aCA8PSAzMiwgJ05hbWUgb2YgdGhlIGFzc2V0IG11c3QgYmUgc2hvcnRlciBvciBlcXVhbCB0byAzMiBjaGFyYWN0ZXJzJyk7CiAgICBpbnRjXzIgLy8gMzIKICAgIDw9CiAgICBhc3NlcnQgLy8gTmFtZSBvZiB0aGUgYXNzZXQgbXVzdCBiZSBzaG9ydGVyIG9yIGVxdWFsIHRvIDMyIGNoYXJhY3RlcnMKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo3OAogICAgLy8gYXNzZXJ0KHN5bWJvbC5sZW5ndGggPiAwLCAnU3ltYm9sIG9mIHRoZSBhc3NldCBtdXN0IGJlIGxvbmdlciBvciBlcXVhbCB0byAxIGNoYXJhY3RlcicpOwogICAgZnJhbWVfZGlnIC0zCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgYXNzZXJ0IC8vIFN5bWJvbCBvZiB0aGUgYXNzZXQgbXVzdCBiZSBsb25nZXIgb3IgZXF1YWwgdG8gMSBjaGFyYWN0ZXIKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo3OQogICAgLy8gYXNzZXJ0KHN5bWJvbC5sZW5ndGggPD0gOCwgJ1N5bWJvbCBvZiB0aGUgYXNzZXQgbXVzdCBiZSBzaG9ydGVyIG9yIGVxdWFsIHRvIDggY2hhcmFjdGVycycpOwogICAgaW50Y18zIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gU3ltYm9sIG9mIHRoZSBhc3NldCBtdXN0IGJlIHNob3J0ZXIgb3IgZXF1YWwgdG8gOCBjaGFyYWN0ZXJzCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjgKICAgIC8vIHB1YmxpYyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPFVpbnROMjU2Pih7IGtleTogJ3QnIH0pOwogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjXzIgLy8gInQiCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6ODAKICAgIC8vIGFzc2VydCghdGhpcy50b3RhbFN1cHBseS5oYXNWYWx1ZSwgJ1RoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgb25seSBvbmNlJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gVGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCBvbmx5IG9uY2UKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo1NgogICAgLy8gcHVibGljIG5hbWUgPSBHbG9iYWxTdGF0ZTxEeW5hbWljQnl0ZXM+KHsga2V5OiAnbicgfSk7CiAgICBwdXNoYnl0ZXMgIm4iCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6ODIKICAgIC8vIHRoaXMubmFtZS52YWx1ZSA9IG5hbWU7CiAgICBmcmFtZV9kaWcgLTQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjAKICAgIC8vIHB1YmxpYyBzeW1ib2wgPSBHbG9iYWxTdGF0ZTxEeW5hbWljQnl0ZXM+KHsga2V5OiAncycgfSk7CiAgICBwdXNoYnl0ZXMgInMiCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6ODMKICAgIC8vIHRoaXMuc3ltYm9sLnZhbHVlID0gc3ltYm9sOwogICAgZnJhbWVfZGlnIC0zCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjY4CiAgICAvLyBwdWJsaWMgdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTxVaW50TjI1Nj4oeyBrZXk6ICd0JyB9KTsKICAgIGJ5dGVjXzIgLy8gInQiCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6ODQKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgPSB0b3RhbFN1cHBseTsKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo2NAogICAgLy8gcHVibGljIGRlY2ltYWxzID0gR2xvYmFsU3RhdGU8VWludE44Pih7IGtleTogJ2QnIH0pOwogICAgcHVzaGJ5dGVzICJkIgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjg1CiAgICAvLyB0aGlzLmRlY2ltYWxzLnZhbHVlID0gZGVjaW1hbHM7CiAgICBmcmFtZV9kaWcgLTIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6ODYKICAgIC8vIGNvbnN0IHNlbmRlciA9IG5ldyBBZGRyZXNzKFR4bi5zZW5kZXIpOwogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjcwCiAgICAvLyBwdWJsaWMgYmFsYW5jZXMgPSBCb3hNYXA8QWRkcmVzcywgVWludE4yNTY+KHsga2V5UHJlZml4OiAnYicgfSk7CiAgICBieXRlY18xIC8vICJiIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjg4CiAgICAvLyB0aGlzLmJhbGFuY2VzKHNlbmRlcikudmFsdWUgPSB0b3RhbFN1cHBseTsKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjkwCiAgICAvLyBlbWl0KG5ldyBhcmMyMDBfVHJhbnNmZXIoeyBmcm9tOiBuZXcgQWRkcmVzcyhHbG9iYWwuemVyb0FkZHJlc3MpLCB0bzogc2VuZGVyLCB2YWx1ZTogdG90YWxTdXBwbHkgfSkpOwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBieXRlYyA0IC8vIG1ldGhvZCAiYXJjMjAwX1RyYW5zZmVyKGFkZHJlc3MsYWRkcmVzcyx1aW50MjU2KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OTEKICAgIC8vIHJldHVybiBuZXcgQm9vbCh0cnVlKTsKICAgIGJ5dGVjXzMgLy8gMHg4MAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuYXJjMjAwX25hbWUoKSAtPiBieXRlczoKYXJjMjAwX25hbWU6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NTYKICAgIC8vIHB1YmxpYyBuYW1lID0gR2xvYmFsU3RhdGU8RHluYW1pY0J5dGVzPih7IGtleTogJ24nIH0pOwogICAgaW50Y18xIC8vIDAKICAgIHB1c2hieXRlcyAibiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTAxCiAgICAvLyByZXR1cm4gbmV3IFN0YXRpY0J5dGVzPDMyPih0aGlzLm5hbWUudmFsdWUubmF0aXZlKTsKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgc2l6ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuYXJjMjAwX3N5bWJvbCgpIC0+IGJ5dGVzOgphcmMyMDBfc3ltYm9sOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjYwCiAgICAvLyBwdWJsaWMgc3ltYm9sID0gR2xvYmFsU3RhdGU8RHluYW1pY0J5dGVzPih7IGtleTogJ3MnIH0pOwogICAgaW50Y18xIC8vIDAKICAgIHB1c2hieXRlcyAicyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTExCiAgICAvLyByZXR1cm4gbmV3IFN0YXRpY0J5dGVzPDg+KHRoaXMuc3ltYm9sLnZhbHVlLm5hdGl2ZSk7CiAgICBleHRyYWN0IDIgMAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgc2l6ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuYXJjMjAwX2RlY2ltYWxzKCkgLT4gYnl0ZXM6CmFyYzIwMF9kZWNpbWFsczoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo2NAogICAgLy8gcHVibGljIGRlY2ltYWxzID0gR2xvYmFsU3RhdGU8VWludE44Pih7IGtleTogJ2QnIH0pOwogICAgaW50Y18xIC8vIDAKICAgIHB1c2hieXRlcyAiZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTIxCiAgICAvLyByZXR1cm4gdGhpcy5kZWNpbWFscy52YWx1ZTsKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo6QXJjMjAwLmFyYzIwMF90b3RhbFN1cHBseSgpIC0+IGJ5dGVzOgphcmMyMDBfdG90YWxTdXBwbHk6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjgKICAgIC8vIHB1YmxpYyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPFVpbnROMjU2Pih7IGtleTogJ3QnIH0pOwogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjXzIgLy8gInQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjEzMQogICAgLy8gcmV0dXJuIHRoaXMudG90YWxTdXBwbHkudmFsdWU7CiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5hcmMyMDBfYmFsYW5jZU9mKG93bmVyOiBieXRlcykgLT4gYnl0ZXM6CmFyYzIwMF9iYWxhbmNlT2Y6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTQwLTE0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBhcmMyMDBfYmFsYW5jZU9mKG93bmVyOiBBZGRyZXNzKTogYXJjNC5VaW50TjI1NiB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNDIKICAgIC8vIHJldHVybiB0aGlzLl9iYWxhbmNlT2Yob3duZXIpOwogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9iYWxhbmNlT2YKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo6QXJjMjAwLmFyYzIwMF90cmFuc2Zlcih0bzogYnl0ZXMsIHZhbHVlOiBieXRlcykgLT4gYnl0ZXM6CmFyYzIwMF90cmFuc2ZlcjoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNTItMTUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIGFyYzIwMF90cmFuc2Zlcih0bzogQWRkcmVzcywgdmFsdWU6IGFyYzQuVWludE4yNTYpOiBhcmM0LkJvb2wgewogICAgcHJvdG8gMiAxCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTU0CiAgICAvLyByZXR1cm4gdGhpcy5fdHJhbnNmZXIobmV3IEFkZHJlc3MoVHhuLnNlbmRlciksIHRvLCB2YWx1ZSk7CiAgICB0eG4gU2VuZGVyCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBfdHJhbnNmZXIKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo6QXJjMjAwLmFyYzIwMF90cmFuc2ZlckZyb20oZnJvbTogYnl0ZXMsIHRvOiBieXRlcywgdmFsdWU6IGJ5dGVzKSAtPiBieXRlczoKYXJjMjAwX3RyYW5zZmVyRnJvbToKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNjUtMTY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIGFyYzIwMF90cmFuc2ZlckZyb20oZnJvbTogQWRkcmVzcywgdG86IEFkZHJlc3MsIHZhbHVlOiBhcmM0LlVpbnROMjU2KTogYXJjNC5Cb29sIHsKICAgIHByb3RvIDMgMQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE2NwogICAgLy8gY29uc3Qgc3BlbmRlciA9IG5ldyBBZGRyZXNzKFR4bi5zZW5kZXIpOwogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE2OAogICAgLy8gY29uc3Qgc3BlbmRlcl9hbGxvd2FuY2UgPSB0aGlzLl9hbGxvd2FuY2UoZnJvbSwgc3BlbmRlcik7CiAgICBmcmFtZV9kaWcgLTMKICAgIGRpZyAxCiAgICBjYWxsc3ViIF9hbGxvd2FuY2UKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNjkKICAgIC8vIGFzc2VydChzcGVuZGVyX2FsbG93YW5jZS5uYXRpdmUgPj0gdmFsdWUubmF0aXZlLCAnaW5zdWZmaWNpZW50IGFwcHJvdmFsJyk7CiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMQogICAgYj49CiAgICBhc3NlcnQgLy8gaW5zdWZmaWNpZW50IGFwcHJvdmFsCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTcwCiAgICAvLyBjb25zdCBuZXdfc3BlbmRlcl9hbGxvd2FuY2UgPSBuZXcgVWludE4yNTYoc3BlbmRlcl9hbGxvd2FuY2UubmF0aXZlIC0gdmFsdWUubmF0aXZlKTsKICAgIGZyYW1lX2RpZyAtMQogICAgYi0KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyAzMgogICAgYnplcm8KICAgIGJ8CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTcxCiAgICAvLyB0aGlzLl9hcHByb3ZlKGZyb20sIHNwZW5kZXIsIG5ld19zcGVuZGVyX2FsbG93YW5jZSk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGNvdmVyIDIKICAgIGNhbGxzdWIgX2FwcHJvdmUKICAgIHBvcAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE3MgogICAgLy8gcmV0dXJuIHRoaXMuX3RyYW5zZmVyKGZyb20sIHRvLCB2YWx1ZSk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF90cmFuc2ZlcgogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuYXJjMjAwX2FwcHJvdmUoc3BlbmRlcjogYnl0ZXMsIHZhbHVlOiBieXRlcykgLT4gYnl0ZXM6CmFyYzIwMF9hcHByb3ZlOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE4Mi0xODMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYXJjMjAwX2FwcHJvdmUoc3BlbmRlcjogQWRkcmVzcywgdmFsdWU6IGFyYzQuVWludE4yNTYpOiBCb29sIHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE4NAogICAgLy8gY29uc3Qgb3duZXIgPSBuZXcgQWRkcmVzcyhUeG4uc2VuZGVyKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxODUKICAgIC8vIHJldHVybiB0aGlzLl9hcHByb3ZlKG93bmVyLCBzcGVuZGVyLCB2YWx1ZSk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBfYXBwcm92ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuYXJjMjAwX2FsbG93YW5jZShvd25lcjogYnl0ZXMsIHNwZW5kZXI6IGJ5dGVzKSAtPiBieXRlczoKYXJjMjAwX2FsbG93YW5jZToKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxOTQtMTk1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGFyYzIwMF9hbGxvd2FuY2Uob3duZXI6IEFkZHJlc3MsIHNwZW5kZXI6IEFkZHJlc3MpOiBhcmM0LlVpbnROMjU2IHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE5NgogICAgLy8gcmV0dXJuIHRoaXMuX2FsbG93YW5jZShvd25lciwgc3BlbmRlcik7CiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBfYWxsb3dhbmNlCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5fYmFsYW5jZU9mKG93bmVyOiBieXRlcykgLT4gYnl0ZXM6Cl9iYWxhbmNlT2Y6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTk5CiAgICAvLyBwcml2YXRlIF9iYWxhbmNlT2Yob3duZXI6IEFkZHJlc3MpOiBVaW50TjI1NiB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo3MAogICAgLy8gcHVibGljIGJhbGFuY2VzID0gQm94TWFwPEFkZHJlc3MsIFVpbnROMjU2Pih7IGtleVByZWZpeDogJ2InIH0pOwogICAgYnl0ZWNfMSAvLyAiYiIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBkdXAKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMDAKICAgIC8vIGlmICghdGhpcy5iYWxhbmNlcyhvd25lcikuZXhpc3RzKSByZXR1cm4gbmV3IFVpbnROMjU2KDApOwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBibnogX2JhbGFuY2VPZl9hZnRlcl9pZl9lbHNlQDIKICAgIGJ5dGVjIDUgLy8gMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBzd2FwCiAgICByZXRzdWIKCl9iYWxhbmNlT2ZfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIwMQogICAgLy8gcmV0dXJuIHRoaXMuYmFsYW5jZXMob3duZXIpLnZhbHVlOwogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5fdHJhbnNmZXIoc2VuZGVyOiBieXRlcywgcmVjaXBpZW50OiBieXRlcywgYW1vdW50OiBieXRlcykgLT4gYnl0ZXM6Cl90cmFuc2ZlcjoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMDQKICAgIC8vIHByaXZhdGUgX3RyYW5zZmVyKHNlbmRlcjogQWRkcmVzcywgcmVjaXBpZW50OiBBZGRyZXNzLCBhbW91bnQ6IFVpbnROMjU2KTogQm9vbCB7CiAgICBwcm90byAzIDEKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMDUKICAgIC8vIGNvbnN0IHNlbmRlcl9iYWxhbmNlID0gdGhpcy5fYmFsYW5jZU9mKHNlbmRlcik7CiAgICBmcmFtZV9kaWcgLTMKICAgIGNhbGxzdWIgX2JhbGFuY2VPZgogICAgZHVwCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjA2CiAgICAvLyBjb25zdCByZWNpcGllbnRfYmFsYW5jZSA9IHRoaXMuX2JhbGFuY2VPZihyZWNpcGllbnQpOwogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIF9iYWxhbmNlT2YKICAgIHN3YXAKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMDcKICAgIC8vIGFzc2VydChzZW5kZXJfYmFsYW5jZS5uYXRpdmUgPj0gYW1vdW50Lm5hdGl2ZSwgJ0luc3VmZmljaWVudCBiYWxhbmNlIGF0IHRoZSBzZW5kZXIgYWNjb3VudCcpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiPj0KICAgIGFzc2VydCAvLyBJbnN1ZmZpY2llbnQgYmFsYW5jZSBhdCB0aGUgc2VuZGVyIGFjY291bnQKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMDkKICAgIC8vIGlmIChzZW5kZXIgIT09IHJlY2lwaWVudCkgewogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgICE9CiAgICBieiBfdHJhbnNmZXJfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjExCiAgICAvLyB0aGlzLmJhbGFuY2VzKHNlbmRlcikudmFsdWUgPSBuZXcgVWludE4yNTYoc2VuZGVyX2JhbGFuY2UubmF0aXZlIC0gYW1vdW50Lm5hdGl2ZSk7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIC0xCiAgICBiLQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDMyCiAgICBiemVybwogICAgYnwKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo3MAogICAgLy8gcHVibGljIGJhbGFuY2VzID0gQm94TWFwPEFkZHJlc3MsIFVpbnROMjU2Pih7IGtleVByZWZpeDogJ2InIH0pOwogICAgYnl0ZWNfMSAvLyAiYiIKICAgIGZyYW1lX2RpZyAtMwogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjExCiAgICAvLyB0aGlzLmJhbGFuY2VzKHNlbmRlcikudmFsdWUgPSBuZXcgVWludE4yNTYoc2VuZGVyX2JhbGFuY2UubmF0aXZlIC0gYW1vdW50Lm5hdGl2ZSk7CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzAKICAgIC8vIHB1YmxpYyBiYWxhbmNlcyA9IEJveE1hcDxBZGRyZXNzLCBVaW50TjI1Nj4oeyBrZXlQcmVmaXg6ICdiJyB9KTsKICAgIGJ5dGVjXzEgLy8gImIiCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIxMgogICAgLy8gdGhpcy5iYWxhbmNlcyhyZWNpcGllbnQpLnZhbHVlID0gcmVjaXBpZW50X2JhbGFuY2U7CiAgICBmcmFtZV9kaWcgMQogICAgYm94X3B1dAoKX3RyYW5zZmVyX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMjAKICAgIC8vIGVtaXQobmV3IGFyYzIwMF9UcmFuc2Zlcih7IGZyb206IHNlbmRlciwgdG86IHJlY2lwaWVudCwgdmFsdWU6IGFtb3VudCB9KSk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyBtZXRob2QgImFyYzIwMF9UcmFuc2ZlcihhZGRyZXNzLGFkZHJlc3MsdWludDI1NikiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIyMQogICAgLy8gcmV0dXJuIG5ldyBCb29sKHRydWUpOwogICAgYnl0ZWNfMyAvLyAweDgwCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo6QXJjMjAwLl9hcHByb3ZhbEtleShvd25lcjogYnl0ZXMsIHNwZW5kZXI6IGJ5dGVzKSAtPiBieXRlczoKX2FwcHJvdmFsS2V5OgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIyMwogICAgLy8gcHJpdmF0ZSBfYXBwcm92YWxLZXkob3duZXI6IEFkZHJlc3MsIHNwZW5kZXI6IEFkZHJlc3MpOiBTdGF0aWNCeXRlczwzMj4gewogICAgcHJvdG8gMiAxCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjI0CiAgICAvLyByZXR1cm4gbmV3IFN0YXRpY0J5dGVzPDMyPihvcC5zaGEyNTYob3AuY29uY2F0KG93bmVyLmJ5dGVzLCBzcGVuZGVyLmJ5dGVzKSkpOwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgc2hhMjU2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgc2l6ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuX2FsbG93YW5jZShvd25lcjogYnl0ZXMsIHNwZW5kZXI6IGJ5dGVzKSAtPiBieXRlczoKX2FsbG93YW5jZToKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMjcKICAgIC8vIHByaXZhdGUgX2FsbG93YW5jZShvd25lcjogQWRkcmVzcywgc3BlbmRlcjogQWRkcmVzcyk6IFVpbnROMjU2IHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIyOAogICAgLy8gY29uc3Qga2V5ID0gdGhpcy5fYXBwcm92YWxLZXkob3duZXIsIHNwZW5kZXIpOwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2FwcHJvdmFsS2V5CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzIKICAgIC8vIHB1YmxpYyBhcHByb3ZhbHMgPSBCb3hNYXA8U3RhdGljQnl0ZXM8MzI+LCBBcHByb3ZhbFN0cnVjdD4oeyBrZXlQcmVmaXg6ICdhJyB9KTsKICAgIHB1c2hieXRlcyAiYSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjI5CiAgICAvLyBpZiAoIXRoaXMuYXBwcm92YWxzKGtleSkuZXhpc3RzKSByZXR1cm4gbmV3IFVpbnROMjU2KDApOwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBibnogX2FsbG93YW5jZV9hZnRlcl9pZl9lbHNlQDIKICAgIGJ5dGVjIDUgLy8gMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBzd2FwCiAgICByZXRzdWIKCl9hbGxvd2FuY2VfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIzMAogICAgLy8gcmV0dXJuIHRoaXMuYXBwcm92YWxzKGtleSkudmFsdWUuYXBwcm92YWxBbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGV4dHJhY3QgMCAzMiAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo6QXJjMjAwLl9hcHByb3ZlKG93bmVyOiBieXRlcywgc3BlbmRlcjogYnl0ZXMsIGFtb3VudDogYnl0ZXMpIC0+IGJ5dGVzOgpfYXBwcm92ZToKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMzMKICAgIC8vIHByaXZhdGUgX2FwcHJvdmUob3duZXI6IEFkZHJlc3MsIHNwZW5kZXI6IEFkZHJlc3MsIGFtb3VudDogVWludE4yNTYpOiBCb29sIHsKICAgIHByb3RvIDMgMQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIzNAogICAgLy8gY29uc3Qga2V5ID0gdGhpcy5fYXBwcm92YWxLZXkob3duZXIsIHNwZW5kZXIpOwogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGNhbGxzdWIgX2FwcHJvdmFsS2V5CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjM1LTIzOQogICAgLy8gY29uc3QgYXBwcm92YWxCb3g6IEFwcHJvdmFsU3RydWN0ID0gbmV3IEFwcHJvdmFsU3RydWN0KHsKICAgIC8vICAgYXBwcm92YWxBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgb3duZXI6IG93bmVyLAogICAgLy8gICBzcGVuZGVyOiBzcGVuZGVyLAogICAgLy8gfSk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAtMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjcyCiAgICAvLyBwdWJsaWMgYXBwcm92YWxzID0gQm94TWFwPFN0YXRpY0J5dGVzPDMyPiwgQXBwcm92YWxTdHJ1Y3Q+KHsga2V5UHJlZml4OiAnYScgfSk7CiAgICBwdXNoYnl0ZXMgImEiCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjI0MAogICAgLy8gdGhpcy5hcHByb3ZhbHMoa2V5KS52YWx1ZSA9IGFwcHJvdmFsQm94LmNvcHkoKTsKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyNDEKICAgIC8vIGVtaXQobmV3IGFyYzIwMF9BcHByb3ZhbCh7IG93bmVyOiBvd25lciwgc3BlbmRlcjogc3BlbmRlciwgdmFsdWU6IGFtb3VudCB9KSk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTk2OWY4NjUgLy8gbWV0aG9kICJhcmMyMDBfQXBwcm92YWwoYWRkcmVzcyxhZGRyZXNzLHVpbnQyNTYpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyNDIKICAgIC8vIHJldHVybiBuZXcgQm9vbCh0cnVlKTsKICAgIGJ5dGVjXzMgLy8gMHg4MAogICAgcmV0c3ViCg==",
240
+ clear: "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="
87
241
  },
88
- "contract": {
89
- "name": "Arc200",
90
- "desc": "",
91
- "methods": [
92
- {
93
- "name": "arc200_name",
94
- "desc": "Returns the name of the token",
95
- "readonly": true,
96
- "args": [],
97
- "returns": {
98
- "type": "string",
99
- "desc": "The name of the token"
100
- }
101
- },
102
- {
103
- "name": "arc200_symbol",
104
- "desc": "Returns the symbol of the token",
105
- "readonly": true,
106
- "args": [],
107
- "returns": {
108
- "type": "string",
109
- "desc": "The symbol of the token"
110
- }
111
- },
112
- {
113
- "name": "arc200_decimals",
114
- "desc": "Returns the decimals of the token",
115
- "readonly": true,
116
- "args": [],
117
- "returns": {
118
- "type": "uint8",
119
- "desc": "The decimals of the token"
120
- }
121
- },
122
- {
123
- "name": "arc200_totalSupply",
124
- "desc": "Returns the total supply of the token",
125
- "readonly": true,
126
- "args": [],
127
- "returns": {
128
- "type": "uint256",
129
- "desc": "The total supply of the token"
130
- }
131
- },
132
- {
133
- "name": "arc200_balanceOf",
134
- "desc": "Returns the current balance of the owner of the token",
135
- "readonly": true,
136
- "args": [
137
- {
138
- "name": "owner",
139
- "type": "address",
140
- "desc": "The address of the owner of the token"
141
- }
142
- ],
143
- "returns": {
144
- "type": "uint256",
145
- "desc": "The current balance of the holder of the token"
146
- }
147
- },
148
- {
149
- "name": "arc200_transfer",
150
- "desc": "Transfers tokens",
151
- "args": [
152
- {
153
- "name": "to",
154
- "type": "address",
155
- "desc": "The destination of the transfer"
156
- },
157
- {
158
- "name": "value",
159
- "type": "uint256",
160
- "desc": "Amount of tokens to transfer"
161
- }
162
- ],
163
- "returns": {
164
- "type": "bool",
165
- "desc": "Success"
166
- }
167
- },
168
- {
169
- "name": "arc200_transferFrom",
170
- "desc": "Transfers tokens from source to destination as approved spender",
171
- "args": [
172
- {
173
- "name": "from",
174
- "type": "address",
175
- "desc": "The source of the transfer"
176
- },
177
- {
178
- "name": "to",
179
- "type": "address",
180
- "desc": "The destination of the transfer"
181
- },
182
- {
183
- "name": "value",
184
- "type": "uint256",
185
- "desc": "Amount of tokens to transfer"
186
- }
187
- ],
188
- "returns": {
189
- "type": "bool",
190
- "desc": "Success"
191
- }
192
- },
193
- {
194
- "name": "arc200_approve",
195
- "desc": "Approve spender for a token",
196
- "args": [
197
- {
198
- "name": "spender",
199
- "type": "address",
200
- "desc": "Who is allowed to take tokens on owner's behalf"
201
- },
202
- {
203
- "name": "value",
204
- "type": "uint256",
205
- "desc": "Amount of tokens to be taken by spender"
206
- }
207
- ],
208
- "returns": {
209
- "type": "bool",
210
- "desc": "Success"
211
- }
212
- },
213
- {
214
- "name": "arc200_allowance",
215
- "desc": "Returns the current allowance of the spender of the tokens of the owner",
216
- "readonly": true,
217
- "args": [
218
- {
219
- "name": "owner",
220
- "type": "address",
221
- "desc": "Owner's account"
222
- },
223
- {
224
- "name": "spender",
225
- "type": "address",
226
- "desc": "Who is allowed to take tokens on owner's behalf"
227
- }
228
- ],
229
- "returns": {
230
- "type": "uint256",
231
- "desc": "The remaining allowance"
232
- }
233
- },
234
- {
235
- "name": "createApplication",
236
- "args": [],
237
- "returns": {
238
- "type": "void"
239
- }
240
- }
241
- ]
242
- }
242
+ byteCode: {
243
+ approval: "CiAEAQAgCCYGBBUffHUBYgF0AYAEeYPDXCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEbQQEZggoEl1OC4gRlfRPsBLauGiUEhOwT1QTsmWBBBILlc8QE2nAluQRKlo+PBLVCISUEu7MZ8zYaAI4KALAAoACQAIAAcABdAEcALgAYAAIjQzEZFEQxGEQ2GgE2GgKIAY8oTFCwIkMxGRREMRhENhoBNhoCiAFsKExQsCJDMRkURDEYRDYaATYaAjYaA4gBJShMULAiQzEZFEQxGEQ2GgE2GgKIAQIoTFCwIkMxGRREMRhENhoBiADmKExQsCJDMRkURDEYRIgA0ShMULAiQzEZFEQxGESIALooTFCwIkMxGRREMRhEiACbKExQsCJDMRkURDEYRIgAfChMULAiQzEZFEQxGEQ2GgE2GgI2GgM2GgSIABEoTFCwIkMxGUD/LzEYFEQiQ4oEATEAMgkSRIv8I1lJRCQORIv9I1lJRCUORCMqZUUBFESAAW6L/GeAAXOL/Wcqi/9ngAFki/5nMQApSwFQi/+/MgNMUIv/UCcETFCwK4kjgAFuZURXAgBJFSQSRIkjgAFzZURXAgBJFSUSRIkjgAFkZUSJIyplRImKAQGL/4gAVImKAgExAIv+i/+IAF+JigMBMQCL/UsBiACnSYv/p0SL/6FJFSQORCSvq4v9TgKIALNIi/2L/ov/iAAxiYoCATEAi/6L/4gAnImKAgGL/ov/iABuiYoBASmL/1BJvUUBQAAEJwVMiYsAvkRMiYoDAYv9iP/gSYv+iP/aTIv/p0SL/Yv+E0EAGosAi/+hSRUkDkQkr6spi/1QTL8pi/5QiwG/i/2L/lCL/1AnBExQsCuMAImKAgGL/ov/UAFJFSQSRImKAgGL/ov/iP/ngAFhTFBJvUUBQAAEJwVMiYsAvkRXACBMiYoDAYv9i/6I/8SL/4v9UIv+UIABYU8CUEy/i/2L/lCL/1CABBlp+GVMULAriQ==",
244
+ clear: "CoEBQw=="
245
+ },
246
+ compilerInfo: { compiler: "puya", compilerVersion: { major: 4, minor: 7, patch: 0 } },
247
+ events: [
248
+ {
249
+ name: "arc200_Transfer",
250
+ args: [
251
+ { type: "address", name: "from" },
252
+ { type: "address", name: "to" },
253
+ { type: "uint256", name: "value" }
254
+ ]
255
+ },
256
+ {
257
+ name: "arc200_Approval",
258
+ args: [
259
+ { type: "address", name: "owner" },
260
+ { type: "address", name: "spender" },
261
+ { type: "uint256", name: "value" }
262
+ ]
263
+ }
264
+ ],
265
+ templateVariables: {}
243
266
  };
244
- var Arc200CallFactory = class {
267
+ var Arc200ParamsFactory = class {
245
268
  /**
246
- * Gets available create call factories
269
+ * Constructs a no op call for the bootstrap(byte[],byte[],uint8,uint256)bool ABI method
270
+ *
271
+ * @param params Parameters for the call
272
+ * @returns An `AppClientMethodCallParams` object for the call
247
273
  */
248
- static get create() {
274
+ static bootstrap(params) {
249
275
  return {
250
- /**
251
- * Constructs a create call for the Arc200 smart contract using the createApplication()void ABI method
252
- *
253
- * @param args Any args for the contract call
254
- * @param params Any additional parameters for the call
255
- * @returns A TypedCallParams object for the call
256
- */
257
- createApplication(args, params = {}) {
258
- return {
259
- method: "createApplication()void",
260
- methodArgs: Array.isArray(args) ? args : [],
261
- ...params
262
- };
263
- }
276
+ ...params,
277
+ method: "bootstrap(byte[],byte[],uint8,uint256)bool",
278
+ args: Array.isArray(params.args) ? params.args : [params.args.name, params.args.symbol, params.args.decimals, params.args.totalSupply]
264
279
  };
265
280
  }
266
281
  /**
267
- * Constructs a no op call for the arc200_name()string ABI method
282
+ * Constructs a no op call for the arc200_name()byte[32] ABI method
268
283
  *
269
284
  * Returns the name of the token
270
285
  *
271
- * @param args Any args for the contract call
272
- * @param params Any additional parameters for the call
273
- * @returns A TypedCallParams object for the call
286
+ * @param params Parameters for the call
287
+ * @returns An `AppClientMethodCallParams` object for the call
274
288
  */
275
- static arc200Name(args, params) {
289
+ static arc200Name(params) {
276
290
  return {
277
- method: "arc200_name()string",
278
- methodArgs: Array.isArray(args) ? args : [],
279
- ...params
291
+ ...params,
292
+ method: "arc200_name()byte[32]",
293
+ args: Array.isArray(params.args) ? params.args : []
280
294
  };
281
295
  }
282
296
  /**
283
- * Constructs a no op call for the arc200_symbol()string ABI method
297
+ * Constructs a no op call for the arc200_symbol()byte[8] ABI method
284
298
  *
285
299
  * Returns the symbol of the token
286
300
  *
287
- * @param args Any args for the contract call
288
- * @param params Any additional parameters for the call
289
- * @returns A TypedCallParams object for the call
301
+ * @param params Parameters for the call
302
+ * @returns An `AppClientMethodCallParams` object for the call
290
303
  */
291
- static arc200Symbol(args, params) {
304
+ static arc200Symbol(params) {
292
305
  return {
293
- method: "arc200_symbol()string",
294
- methodArgs: Array.isArray(args) ? args : [],
295
- ...params
306
+ ...params,
307
+ method: "arc200_symbol()byte[8]",
308
+ args: Array.isArray(params.args) ? params.args : []
296
309
  };
297
310
  }
298
311
  /**
@@ -300,15 +313,14 @@ var Arc200CallFactory = class {
300
313
  *
301
314
  * Returns the decimals of the token
302
315
  *
303
- * @param args Any args for the contract call
304
- * @param params Any additional parameters for the call
305
- * @returns A TypedCallParams object for the call
316
+ * @param params Parameters for the call
317
+ * @returns An `AppClientMethodCallParams` object for the call
306
318
  */
307
- static arc200Decimals(args, params) {
319
+ static arc200Decimals(params) {
308
320
  return {
321
+ ...params,
309
322
  method: "arc200_decimals()uint8",
310
- methodArgs: Array.isArray(args) ? args : [],
311
- ...params
323
+ args: Array.isArray(params.args) ? params.args : []
312
324
  };
313
325
  }
314
326
  /**
@@ -316,15 +328,14 @@ var Arc200CallFactory = class {
316
328
  *
317
329
  * Returns the total supply of the token
318
330
  *
319
- * @param args Any args for the contract call
320
- * @param params Any additional parameters for the call
321
- * @returns A TypedCallParams object for the call
331
+ * @param params Parameters for the call
332
+ * @returns An `AppClientMethodCallParams` object for the call
322
333
  */
323
- static arc200TotalSupply(args, params) {
334
+ static arc200TotalSupply(params) {
324
335
  return {
336
+ ...params,
325
337
  method: "arc200_totalSupply()uint256",
326
- methodArgs: Array.isArray(args) ? args : [],
327
- ...params
338
+ args: Array.isArray(params.args) ? params.args : []
328
339
  };
329
340
  }
330
341
  /**
@@ -332,15 +343,14 @@ var Arc200CallFactory = class {
332
343
  *
333
344
  * Returns the current balance of the owner of the token
334
345
  *
335
- * @param args Any args for the contract call
336
- * @param params Any additional parameters for the call
337
- * @returns A TypedCallParams object for the call
346
+ * @param params Parameters for the call
347
+ * @returns An `AppClientMethodCallParams` object for the call
338
348
  */
339
- static arc200BalanceOf(args, params) {
349
+ static arc200BalanceOf(params) {
340
350
  return {
351
+ ...params,
341
352
  method: "arc200_balanceOf(address)uint256",
342
- methodArgs: Array.isArray(args) ? args : [args.owner],
343
- ...params
353
+ args: Array.isArray(params.args) ? params.args : [params.args.owner]
344
354
  };
345
355
  }
346
356
  /**
@@ -348,15 +358,14 @@ var Arc200CallFactory = class {
348
358
  *
349
359
  * Transfers tokens
350
360
  *
351
- * @param args Any args for the contract call
352
- * @param params Any additional parameters for the call
353
- * @returns A TypedCallParams object for the call
361
+ * @param params Parameters for the call
362
+ * @returns An `AppClientMethodCallParams` object for the call
354
363
  */
355
- static arc200Transfer(args, params) {
364
+ static arc200Transfer(params) {
356
365
  return {
366
+ ...params,
357
367
  method: "arc200_transfer(address,uint256)bool",
358
- methodArgs: Array.isArray(args) ? args : [args.to, args.value],
359
- ...params
368
+ args: Array.isArray(params.args) ? params.args : [params.args.to, params.args.value]
360
369
  };
361
370
  }
362
371
  /**
@@ -364,15 +373,14 @@ var Arc200CallFactory = class {
364
373
  *
365
374
  * Transfers tokens from source to destination as approved spender
366
375
  *
367
- * @param args Any args for the contract call
368
- * @param params Any additional parameters for the call
369
- * @returns A TypedCallParams object for the call
376
+ * @param params Parameters for the call
377
+ * @returns An `AppClientMethodCallParams` object for the call
370
378
  */
371
- static arc200TransferFrom(args, params) {
379
+ static arc200TransferFrom(params) {
372
380
  return {
381
+ ...params,
373
382
  method: "arc200_transferFrom(address,address,uint256)bool",
374
- methodArgs: Array.isArray(args) ? args : [args.from, args.to, args.value],
375
- ...params
383
+ args: Array.isArray(params.args) ? params.args : [params.args.from, params.args.to, params.args.value]
376
384
  };
377
385
  }
378
386
  /**
@@ -380,15 +388,14 @@ var Arc200CallFactory = class {
380
388
  *
381
389
  * Approve spender for a token
382
390
  *
383
- * @param args Any args for the contract call
384
- * @param params Any additional parameters for the call
385
- * @returns A TypedCallParams object for the call
391
+ * @param params Parameters for the call
392
+ * @returns An `AppClientMethodCallParams` object for the call
386
393
  */
387
- static arc200Approve(args, params) {
394
+ static arc200Approve(params) {
388
395
  return {
396
+ ...params,
389
397
  method: "arc200_approve(address,uint256)bool",
390
- methodArgs: Array.isArray(args) ? args : [args.spender, args.value],
391
- ...params
398
+ args: Array.isArray(params.args) ? params.args : [params.args.spender, params.args.value]
392
399
  };
393
400
  }
394
401
  /**
@@ -396,56 +403,121 @@ var Arc200CallFactory = class {
396
403
  *
397
404
  * Returns the current allowance of the spender of the tokens of the owner
398
405
  *
399
- * @param args Any args for the contract call
400
- * @param params Any additional parameters for the call
401
- * @returns A TypedCallParams object for the call
406
+ * @param params Parameters for the call
407
+ * @returns An `AppClientMethodCallParams` object for the call
402
408
  */
403
- static arc200Allowance(args, params) {
409
+ static arc200Allowance(params) {
404
410
  return {
411
+ ...params,
405
412
  method: "arc200_allowance(address,address)uint256",
406
- methodArgs: Array.isArray(args) ? args : [args.owner, args.spender],
407
- ...params
413
+ args: Array.isArray(params.args) ? params.args : [params.args.owner, params.args.spender]
408
414
  };
409
415
  }
410
416
  };
411
- var Arc200Client = class {
417
+ var Arc200Factory = class {
412
418
  /**
413
- * Creates a new instance of `Arc200Client`
419
+ * Creates a new instance of `Arc200Factory`
414
420
  *
415
- * @param appDetails appDetails The details to identify the app to deploy
416
- * @param algod An algod client instance
421
+ * @param params The parameters to initialise the app factory with
417
422
  */
418
- constructor(appDetails, algod) {
419
- this.algod = algod;
420
- this.sender = appDetails.sender;
421
- this.appClient = algokit.getAppClient({
422
- ...appDetails,
423
- app: APP_SPEC
424
- }, algod);
423
+ constructor(params) {
424
+ /**
425
+ * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.
426
+ */
427
+ this.params = {
428
+ /**
429
+ * Gets available create methods
430
+ */
431
+ create: {
432
+ /**
433
+ * Creates a new instance of the Arc200 smart contract using a bare call.
434
+ *
435
+ * @param params The params for the bare (raw) call
436
+ * @returns The params for a create call
437
+ */
438
+ bare: (params) => {
439
+ return this.appFactory.params.bare.create(params);
440
+ }
441
+ }
442
+ };
443
+ /**
444
+ * Create transactions for the current app
445
+ */
446
+ this.createTransaction = {
447
+ /**
448
+ * Gets available create methods
449
+ */
450
+ create: {
451
+ /**
452
+ * Creates a new instance of the Arc200 smart contract using a bare call.
453
+ *
454
+ * @param params The params for the bare (raw) call
455
+ * @returns The transaction for a create call
456
+ */
457
+ bare: (params) => {
458
+ return this.appFactory.createTransaction.bare.create(params);
459
+ }
460
+ }
461
+ };
462
+ /**
463
+ * Send calls to the current app
464
+ */
465
+ this.send = {
466
+ /**
467
+ * Gets available create methods
468
+ */
469
+ create: {
470
+ /**
471
+ * Creates a new instance of the Arc200 smart contract using a bare call.
472
+ *
473
+ * @param params The params for the bare (raw) call
474
+ * @returns The create result
475
+ */
476
+ bare: async (params) => {
477
+ const result = await this.appFactory.send.bare.create(params);
478
+ return { result: result.result, appClient: new Arc200Client(result.appClient) };
479
+ }
480
+ }
481
+ };
482
+ this.appFactory = new _AppFactory({
483
+ ...params,
484
+ appSpec: APP_SPEC
485
+ });
486
+ }
487
+ /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */
488
+ get appName() {
489
+ return this.appFactory.appName;
490
+ }
491
+ /** The ARC-56 app spec being used */
492
+ get appSpec() {
493
+ return APP_SPEC;
494
+ }
495
+ /** A reference to the underlying `AlgorandClient` this app factory is using. */
496
+ get algorand() {
497
+ return this.appFactory.algorand;
425
498
  }
426
499
  /**
427
- * Checks for decode errors on the AppCallTransactionResult and maps the return value to the specified generic type
500
+ * Returns a new `AppClient` client for an app instance of the given ID.
428
501
  *
429
- * @param result The AppCallTransactionResult to be mapped
430
- * @param returnValueFormatter An optional delegate to format the return value if required
431
- * @returns The smart contract response with an updated return value
502
+ * Automatically populates appName, defaultSender and source maps from the factory
503
+ * if not specified in the params.
504
+ * @param params The parameters to create the app client
505
+ * @returns The `AppClient`
432
506
  */
433
- mapReturnValue(result, returnValueFormatter) {
434
- if (result.return?.decodeError) {
435
- throw result.return.decodeError;
436
- }
437
- const returnValue = result.return?.returnValue !== void 0 && returnValueFormatter !== void 0 ? returnValueFormatter(result.return.returnValue) : result.return?.returnValue;
438
- return { ...result, return: returnValue };
507
+ getAppClientById(params) {
508
+ return new Arc200Client(this.appFactory.getAppClientById(params));
439
509
  }
440
510
  /**
441
- * Calls the ABI method with the matching signature using an onCompletion code of NO_OP
511
+ * Returns a new `AppClient` client, resolving the app by creator address and name
512
+ * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).
442
513
  *
443
- * @param typedCallParams An object containing the method signature, args, and any other relevant parameters
444
- * @param returnValueFormatter An optional delegate which when provided will be used to map non-undefined return values to the target type
445
- * @returns The result of the smart contract call
514
+ * Automatically populates appName, defaultSender and source maps from the factory
515
+ * if not specified in the params.
516
+ * @param params The parameters to create the app client
517
+ * @returns The `AppClient`
446
518
  */
447
- async call(typedCallParams, returnValueFormatter) {
448
- return this.mapReturnValue(await this.appClient.call(typedCallParams), returnValueFormatter);
519
+ async getAppClientByCreatorAndName(params) {
520
+ return new Arc200Client(await this.appFactory.getAppClientByCreatorAndName(params));
449
521
  }
450
522
  /**
451
523
  * Idempotently deploys the Arc200 smart contract.
@@ -453,227 +525,832 @@ var Arc200Client = class {
453
525
  * @param params The arguments for the contract calls and any additional parameters for the call
454
526
  * @returns The deployment result
455
527
  */
456
- deploy(params = {}) {
457
- const createArgs = params.createCall?.(Arc200CallFactory.create);
458
- return this.appClient.deploy({
459
- ...params,
460
- createArgs,
461
- createOnCompleteAction: createArgs?.onCompleteAction
528
+ async deploy(params = {}) {
529
+ const result = await this.appFactory.deploy({
530
+ ...params
462
531
  });
532
+ return { result: result.result, appClient: new Arc200Client(result.appClient) };
463
533
  }
464
- /**
465
- * Gets available create methods
466
- */
467
- get create() {
468
- const $this = this;
469
- return {
534
+ };
535
+ var Arc200Client = class _Arc200Client {
536
+ constructor(appClientOrParams) {
537
+ /**
538
+ * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.
539
+ */
540
+ this.params = {
541
+ /**
542
+ * Makes a clear_state call to an existing instance of the Arc200 smart contract.
543
+ *
544
+ * @param params The params for the bare (raw) call
545
+ * @returns The clearState result
546
+ */
547
+ clearState: (params) => {
548
+ return this.appClient.params.bare.clearState(params);
549
+ },
550
+ /**
551
+ * Makes a call to the Arc200 smart contract using the `bootstrap(byte[],byte[],uint8,uint256)bool` ABI method.
552
+ *
553
+ * @param params The params for the smart contract call
554
+ * @returns The call params
555
+ */
556
+ bootstrap: (params) => {
557
+ return this.appClient.params.call(Arc200ParamsFactory.bootstrap(params));
558
+ },
559
+ /**
560
+ * Makes a call to the Arc200 smart contract using the `arc200_name()byte[32]` ABI method.
561
+ *
562
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
563
+ *
564
+ * Returns the name of the token
565
+ *
566
+ * @param params The params for the smart contract call
567
+ * @returns The call params: The name of the token
568
+ */
569
+ arc200Name: (params = { args: [] }) => {
570
+ return this.appClient.params.call(Arc200ParamsFactory.arc200Name(params));
571
+ },
572
+ /**
573
+ * Makes a call to the Arc200 smart contract using the `arc200_symbol()byte[8]` ABI method.
574
+ *
575
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
576
+ *
577
+ * Returns the symbol of the token
578
+ *
579
+ * @param params The params for the smart contract call
580
+ * @returns The call params: The symbol of the token
581
+ */
582
+ arc200Symbol: (params = { args: [] }) => {
583
+ return this.appClient.params.call(Arc200ParamsFactory.arc200Symbol(params));
584
+ },
585
+ /**
586
+ * Makes a call to the Arc200 smart contract using the `arc200_decimals()uint8` ABI method.
587
+ *
588
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
589
+ *
590
+ * Returns the decimals of the token
591
+ *
592
+ * @param params The params for the smart contract call
593
+ * @returns The call params: The decimals of the token
594
+ */
595
+ arc200Decimals: (params = { args: [] }) => {
596
+ return this.appClient.params.call(Arc200ParamsFactory.arc200Decimals(params));
597
+ },
598
+ /**
599
+ * Makes a call to the Arc200 smart contract using the `arc200_totalSupply()uint256` ABI method.
600
+ *
601
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
602
+ *
603
+ * Returns the total supply of the token
604
+ *
605
+ * @param params The params for the smart contract call
606
+ * @returns The call params: The total supply of the token
607
+ */
608
+ arc200TotalSupply: (params = { args: [] }) => {
609
+ return this.appClient.params.call(Arc200ParamsFactory.arc200TotalSupply(params));
610
+ },
611
+ /**
612
+ * Makes a call to the Arc200 smart contract using the `arc200_balanceOf(address)uint256` ABI method.
613
+ *
614
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
615
+ *
616
+ * Returns the current balance of the owner of the token
617
+ *
618
+ * @param params The params for the smart contract call
619
+ * @returns The call params: The current balance of the holder of the token
620
+ */
621
+ arc200BalanceOf: (params) => {
622
+ return this.appClient.params.call(Arc200ParamsFactory.arc200BalanceOf(params));
623
+ },
624
+ /**
625
+ * Makes a call to the Arc200 smart contract using the `arc200_transfer(address,uint256)bool` ABI method.
626
+ *
627
+ * Transfers tokens
628
+ *
629
+ * @param params The params for the smart contract call
630
+ * @returns The call params: Success
631
+ */
632
+ arc200Transfer: (params) => {
633
+ return this.appClient.params.call(Arc200ParamsFactory.arc200Transfer(params));
634
+ },
635
+ /**
636
+ * Makes a call to the Arc200 smart contract using the `arc200_transferFrom(address,address,uint256)bool` ABI method.
637
+ *
638
+ * Transfers tokens from source to destination as approved spender
639
+ *
640
+ * @param params The params for the smart contract call
641
+ * @returns The call params: Success
642
+ */
643
+ arc200TransferFrom: (params) => {
644
+ return this.appClient.params.call(Arc200ParamsFactory.arc200TransferFrom(params));
645
+ },
646
+ /**
647
+ * Makes a call to the Arc200 smart contract using the `arc200_approve(address,uint256)bool` ABI method.
648
+ *
649
+ * Approve spender for a token
650
+ *
651
+ * @param params The params for the smart contract call
652
+ * @returns The call params: Success
653
+ */
654
+ arc200Approve: (params) => {
655
+ return this.appClient.params.call(Arc200ParamsFactory.arc200Approve(params));
656
+ },
657
+ /**
658
+ * Makes a call to the Arc200 smart contract using the `arc200_allowance(address,address)uint256` ABI method.
659
+ *
660
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
661
+ *
662
+ * Returns the current allowance of the spender of the tokens of the owner
663
+ *
664
+ * @param params The params for the smart contract call
665
+ * @returns The call params: The remaining allowance
666
+ */
667
+ arc200Allowance: (params) => {
668
+ return this.appClient.params.call(Arc200ParamsFactory.arc200Allowance(params));
669
+ }
670
+ };
671
+ /**
672
+ * Create transactions for the current app
673
+ */
674
+ this.createTransaction = {
675
+ /**
676
+ * Makes a clear_state call to an existing instance of the Arc200 smart contract.
677
+ *
678
+ * @param params The params for the bare (raw) call
679
+ * @returns The clearState result
680
+ */
681
+ clearState: (params) => {
682
+ return this.appClient.createTransaction.bare.clearState(params);
683
+ },
684
+ /**
685
+ * Makes a call to the Arc200 smart contract using the `bootstrap(byte[],byte[],uint8,uint256)bool` ABI method.
686
+ *
687
+ * @param params The params for the smart contract call
688
+ * @returns The call transaction
689
+ */
690
+ bootstrap: (params) => {
691
+ return this.appClient.createTransaction.call(Arc200ParamsFactory.bootstrap(params));
692
+ },
693
+ /**
694
+ * Makes a call to the Arc200 smart contract using the `arc200_name()byte[32]` ABI method.
695
+ *
696
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
697
+ *
698
+ * Returns the name of the token
699
+ *
700
+ * @param params The params for the smart contract call
701
+ * @returns The call transaction: The name of the token
702
+ */
703
+ arc200Name: (params = { args: [] }) => {
704
+ return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Name(params));
705
+ },
470
706
  /**
471
- * Creates a new instance of the Arc200 smart contract using the createApplication()void ABI method.
707
+ * Makes a call to the Arc200 smart contract using the `arc200_symbol()byte[8]` ABI method.
708
+ *
709
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
710
+ *
711
+ * Returns the symbol of the token
472
712
  *
473
- * @param args The arguments for the smart contract call
474
- * @param params Any additional parameters for the call
475
- * @returns The create result
713
+ * @param params The params for the smart contract call
714
+ * @returns The call transaction: The symbol of the token
476
715
  */
477
- async createApplication(args, params = {}) {
478
- return $this.mapReturnValue(await $this.appClient.create(Arc200CallFactory.create.createApplication(args, params)));
716
+ arc200Symbol: (params = { args: [] }) => {
717
+ return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Symbol(params));
718
+ },
719
+ /**
720
+ * Makes a call to the Arc200 smart contract using the `arc200_decimals()uint8` ABI method.
721
+ *
722
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
723
+ *
724
+ * Returns the decimals of the token
725
+ *
726
+ * @param params The params for the smart contract call
727
+ * @returns The call transaction: The decimals of the token
728
+ */
729
+ arc200Decimals: (params = { args: [] }) => {
730
+ return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Decimals(params));
731
+ },
732
+ /**
733
+ * Makes a call to the Arc200 smart contract using the `arc200_totalSupply()uint256` ABI method.
734
+ *
735
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
736
+ *
737
+ * Returns the total supply of the token
738
+ *
739
+ * @param params The params for the smart contract call
740
+ * @returns The call transaction: The total supply of the token
741
+ */
742
+ arc200TotalSupply: (params = { args: [] }) => {
743
+ return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200TotalSupply(params));
744
+ },
745
+ /**
746
+ * Makes a call to the Arc200 smart contract using the `arc200_balanceOf(address)uint256` ABI method.
747
+ *
748
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
749
+ *
750
+ * Returns the current balance of the owner of the token
751
+ *
752
+ * @param params The params for the smart contract call
753
+ * @returns The call transaction: The current balance of the holder of the token
754
+ */
755
+ arc200BalanceOf: (params) => {
756
+ return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200BalanceOf(params));
757
+ },
758
+ /**
759
+ * Makes a call to the Arc200 smart contract using the `arc200_transfer(address,uint256)bool` ABI method.
760
+ *
761
+ * Transfers tokens
762
+ *
763
+ * @param params The params for the smart contract call
764
+ * @returns The call transaction: Success
765
+ */
766
+ arc200Transfer: (params) => {
767
+ return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Transfer(params));
768
+ },
769
+ /**
770
+ * Makes a call to the Arc200 smart contract using the `arc200_transferFrom(address,address,uint256)bool` ABI method.
771
+ *
772
+ * Transfers tokens from source to destination as approved spender
773
+ *
774
+ * @param params The params for the smart contract call
775
+ * @returns The call transaction: Success
776
+ */
777
+ arc200TransferFrom: (params) => {
778
+ return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200TransferFrom(params));
779
+ },
780
+ /**
781
+ * Makes a call to the Arc200 smart contract using the `arc200_approve(address,uint256)bool` ABI method.
782
+ *
783
+ * Approve spender for a token
784
+ *
785
+ * @param params The params for the smart contract call
786
+ * @returns The call transaction: Success
787
+ */
788
+ arc200Approve: (params) => {
789
+ return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Approve(params));
790
+ },
791
+ /**
792
+ * Makes a call to the Arc200 smart contract using the `arc200_allowance(address,address)uint256` ABI method.
793
+ *
794
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
795
+ *
796
+ * Returns the current allowance of the spender of the tokens of the owner
797
+ *
798
+ * @param params The params for the smart contract call
799
+ * @returns The call transaction: The remaining allowance
800
+ */
801
+ arc200Allowance: (params) => {
802
+ return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Allowance(params));
479
803
  }
480
804
  };
805
+ /**
806
+ * Send calls to the current app
807
+ */
808
+ this.send = {
809
+ /**
810
+ * Makes a clear_state call to an existing instance of the Arc200 smart contract.
811
+ *
812
+ * @param params The params for the bare (raw) call
813
+ * @returns The clearState result
814
+ */
815
+ clearState: (params) => {
816
+ return this.appClient.send.bare.clearState(params);
817
+ },
818
+ /**
819
+ * Makes a call to the Arc200 smart contract using the `bootstrap(byte[],byte[],uint8,uint256)bool` ABI method.
820
+ *
821
+ * @param params The params for the smart contract call
822
+ * @returns The call result
823
+ */
824
+ bootstrap: async (params) => {
825
+ const result = await this.appClient.send.call(Arc200ParamsFactory.bootstrap(params));
826
+ return {
827
+ ...result,
828
+ return: result.return
829
+ };
830
+ },
831
+ /**
832
+ * Makes a call to the Arc200 smart contract using the `arc200_name()byte[32]` ABI method.
833
+ *
834
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
835
+ *
836
+ * Returns the name of the token
837
+ *
838
+ * @param params The params for the smart contract call
839
+ * @returns The call result: The name of the token
840
+ */
841
+ arc200Name: async (params = { args: [] }) => {
842
+ const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Name(params));
843
+ return { ...result, return: result.return };
844
+ },
845
+ /**
846
+ * Makes a call to the Arc200 smart contract using the `arc200_symbol()byte[8]` ABI method.
847
+ *
848
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
849
+ *
850
+ * Returns the symbol of the token
851
+ *
852
+ * @param params The params for the smart contract call
853
+ * @returns The call result: The symbol of the token
854
+ */
855
+ arc200Symbol: async (params = { args: [] }) => {
856
+ const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Symbol(params));
857
+ return { ...result, return: result.return };
858
+ },
859
+ /**
860
+ * Makes a call to the Arc200 smart contract using the `arc200_decimals()uint8` ABI method.
861
+ *
862
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
863
+ *
864
+ * Returns the decimals of the token
865
+ *
866
+ * @param params The params for the smart contract call
867
+ * @returns The call result: The decimals of the token
868
+ */
869
+ arc200Decimals: async (params = { args: [] }) => {
870
+ const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Decimals(params));
871
+ return { ...result, return: result.return };
872
+ },
873
+ /**
874
+ * Makes a call to the Arc200 smart contract using the `arc200_totalSupply()uint256` ABI method.
875
+ *
876
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
877
+ *
878
+ * Returns the total supply of the token
879
+ *
880
+ * @param params The params for the smart contract call
881
+ * @returns The call result: The total supply of the token
882
+ */
883
+ arc200TotalSupply: async (params = { args: [] }) => {
884
+ const result = await this.appClient.send.call(Arc200ParamsFactory.arc200TotalSupply(params));
885
+ return {
886
+ ...result,
887
+ return: result.return
888
+ };
889
+ },
890
+ /**
891
+ * Makes a call to the Arc200 smart contract using the `arc200_balanceOf(address)uint256` ABI method.
892
+ *
893
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
894
+ *
895
+ * Returns the current balance of the owner of the token
896
+ *
897
+ * @param params The params for the smart contract call
898
+ * @returns The call result: The current balance of the holder of the token
899
+ */
900
+ arc200BalanceOf: async (params) => {
901
+ const result = await this.appClient.send.call(Arc200ParamsFactory.arc200BalanceOf(params));
902
+ return {
903
+ ...result,
904
+ return: result.return
905
+ };
906
+ },
907
+ /**
908
+ * Makes a call to the Arc200 smart contract using the `arc200_transfer(address,uint256)bool` ABI method.
909
+ *
910
+ * Transfers tokens
911
+ *
912
+ * @param params The params for the smart contract call
913
+ * @returns The call result: Success
914
+ */
915
+ arc200Transfer: async (params) => {
916
+ const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Transfer(params));
917
+ return {
918
+ ...result,
919
+ return: result.return
920
+ };
921
+ },
922
+ /**
923
+ * Makes a call to the Arc200 smart contract using the `arc200_transferFrom(address,address,uint256)bool` ABI method.
924
+ *
925
+ * Transfers tokens from source to destination as approved spender
926
+ *
927
+ * @param params The params for the smart contract call
928
+ * @returns The call result: Success
929
+ */
930
+ arc200TransferFrom: async (params) => {
931
+ const result = await this.appClient.send.call(Arc200ParamsFactory.arc200TransferFrom(params));
932
+ return {
933
+ ...result,
934
+ return: result.return
935
+ };
936
+ },
937
+ /**
938
+ * Makes a call to the Arc200 smart contract using the `arc200_approve(address,uint256)bool` ABI method.
939
+ *
940
+ * Approve spender for a token
941
+ *
942
+ * @param params The params for the smart contract call
943
+ * @returns The call result: Success
944
+ */
945
+ arc200Approve: async (params) => {
946
+ const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Approve(params));
947
+ return {
948
+ ...result,
949
+ return: result.return
950
+ };
951
+ },
952
+ /**
953
+ * Makes a call to the Arc200 smart contract using the `arc200_allowance(address,address)uint256` ABI method.
954
+ *
955
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
956
+ *
957
+ * Returns the current allowance of the spender of the tokens of the owner
958
+ *
959
+ * @param params The params for the smart contract call
960
+ * @returns The call result: The remaining allowance
961
+ */
962
+ arc200Allowance: async (params) => {
963
+ const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Allowance(params));
964
+ return {
965
+ ...result,
966
+ return: result.return
967
+ };
968
+ }
969
+ };
970
+ /**
971
+ * Methods to access state for the current Arc200 app
972
+ */
973
+ this.state = {
974
+ /**
975
+ * Methods to access global state for the current Arc200 app
976
+ */
977
+ global: {
978
+ /**
979
+ * Get all current keyed values from global state
980
+ */
981
+ getAll: async () => {
982
+ const result = await this.appClient.state.global.getAll();
983
+ return {
984
+ name: result.name,
985
+ symbol: result.symbol,
986
+ decimals: result.decimals,
987
+ totalSupply: result.totalSupply
988
+ };
989
+ },
990
+ /**
991
+ * Get the current value of the name key in global state
992
+ */
993
+ name: async () => {
994
+ return await this.appClient.state.global.getValue("name");
995
+ },
996
+ /**
997
+ * Get the current value of the symbol key in global state
998
+ */
999
+ symbol: async () => {
1000
+ return await this.appClient.state.global.getValue("symbol");
1001
+ },
1002
+ /**
1003
+ * Get the current value of the decimals key in global state
1004
+ */
1005
+ decimals: async () => {
1006
+ return await this.appClient.state.global.getValue("decimals");
1007
+ },
1008
+ /**
1009
+ * Get the current value of the totalSupply key in global state
1010
+ */
1011
+ totalSupply: async () => {
1012
+ return await this.appClient.state.global.getValue("totalSupply");
1013
+ }
1014
+ },
1015
+ /**
1016
+ * Methods to access box state for the current Arc200 app
1017
+ */
1018
+ box: {
1019
+ /**
1020
+ * Get all current keyed values from box state
1021
+ */
1022
+ getAll: async () => {
1023
+ const result = await this.appClient.state.box.getAll();
1024
+ return {};
1025
+ },
1026
+ /**
1027
+ * Get values from the balances map in box state
1028
+ */
1029
+ balances: {
1030
+ /**
1031
+ * Get all current values of the balances map in box state
1032
+ */
1033
+ getMap: async () => {
1034
+ return await this.appClient.state.box.getMap("balances");
1035
+ },
1036
+ /**
1037
+ * Get a current value of the balances map by key from box state
1038
+ */
1039
+ value: async (key) => {
1040
+ return await this.appClient.state.box.getMapValue("balances", key);
1041
+ }
1042
+ },
1043
+ /**
1044
+ * Get values from the approvals map in box state
1045
+ */
1046
+ approvals: {
1047
+ /**
1048
+ * Get all current values of the approvals map in box state
1049
+ */
1050
+ getMap: async () => {
1051
+ return await this.appClient.state.box.getMap("approvals");
1052
+ },
1053
+ /**
1054
+ * Get a current value of the approvals map by key from box state
1055
+ */
1056
+ value: async (key) => {
1057
+ return await this.appClient.state.box.getMapValue("approvals", key);
1058
+ }
1059
+ }
1060
+ }
1061
+ };
1062
+ this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({
1063
+ ...appClientOrParams,
1064
+ appSpec: APP_SPEC
1065
+ });
481
1066
  }
482
1067
  /**
483
- * Makes a clear_state call to an existing instance of the Arc200 smart contract.
484
- *
485
- * @param args The arguments for the bare call
486
- * @returns The clear_state result
1068
+ * Checks for decode errors on the given return value and maps the return value to the return type for the given method
1069
+ * @returns The typed return value or undefined if there was no value
487
1070
  */
488
- clearState(args = {}) {
489
- return this.appClient.clearState(args);
1071
+ decodeReturnValue(method, returnValue) {
1072
+ return returnValue !== void 0 ? getArc56ReturnValue(
1073
+ returnValue,
1074
+ this.appClient.getABIMethod(method),
1075
+ APP_SPEC.structs
1076
+ ) : void 0;
490
1077
  }
491
1078
  /**
492
- * Calls the arc200_name()string ABI method.
493
- *
494
- * Returns the name of the token
495
- *
496
- * @param args The arguments for the contract call
497
- * @param params Any additional parameters for the call
498
- * @returns The result of the call: The name of the token
1079
+ * Returns a new `Arc200Client` client, resolving the app by creator address and name
1080
+ * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).
1081
+ * @param params The parameters to create the app client
499
1082
  */
500
- arc200Name(args, params = {}) {
501
- return this.call(Arc200CallFactory.arc200Name(args, params));
1083
+ static async fromCreatorAndName(params) {
1084
+ return new _Arc200Client(await _AppClient.fromCreatorAndName({ ...params, appSpec: APP_SPEC }));
502
1085
  }
503
1086
  /**
504
- * Calls the arc200_symbol()string ABI method.
1087
+ * Returns an `Arc200Client` instance for the current network based on
1088
+ * pre-determined network-specific app IDs specified in the ARC-56 app spec.
505
1089
  *
506
- * Returns the symbol of the token
507
- *
508
- * @param args The arguments for the contract call
509
- * @param params Any additional parameters for the call
510
- * @returns The result of the call: The symbol of the token
1090
+ * If no IDs are in the app spec or the network isn't recognised, an error is thrown.
1091
+ * @param params The parameters to create the app client
511
1092
  */
512
- arc200Symbol(args, params = {}) {
513
- return this.call(Arc200CallFactory.arc200Symbol(args, params));
1093
+ static async fromNetwork(params) {
1094
+ return new _Arc200Client(await _AppClient.fromNetwork({ ...params, appSpec: APP_SPEC }));
1095
+ }
1096
+ /** The ID of the app instance this client is linked to. */
1097
+ get appId() {
1098
+ return this.appClient.appId;
1099
+ }
1100
+ /** The app address of the app instance this client is linked to. */
1101
+ get appAddress() {
1102
+ return this.appClient.appAddress;
1103
+ }
1104
+ /** The name of the app. */
1105
+ get appName() {
1106
+ return this.appClient.appName;
1107
+ }
1108
+ /** The ARC-56 app spec being used */
1109
+ get appSpec() {
1110
+ return this.appClient.appSpec;
1111
+ }
1112
+ /** A reference to the underlying `AlgorandClient` this app client is using. */
1113
+ get algorand() {
1114
+ return this.appClient.algorand;
514
1115
  }
515
1116
  /**
516
- * Calls the arc200_decimals()uint8 ABI method.
517
- *
518
- * Returns the decimals of the token
1117
+ * Clone this app client with different params
519
1118
  *
520
- * @param args The arguments for the contract call
521
- * @param params Any additional parameters for the call
522
- * @returns The result of the call: The decimals of the token
1119
+ * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.
1120
+ * @returns A new app client with the altered params
523
1121
  */
524
- arc200Decimals(args, params = {}) {
525
- return this.call(Arc200CallFactory.arc200Decimals(args, params));
1122
+ clone(params) {
1123
+ return new _Arc200Client(this.appClient.clone(params));
526
1124
  }
527
1125
  /**
528
- * Calls the arc200_totalSupply()uint256 ABI method.
1126
+ * Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_name()byte[32]` ABI method.
529
1127
  *
530
- * Returns the total supply of the token
1128
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1129
+ *
1130
+ * Returns the name of the token
531
1131
  *
532
- * @param args The arguments for the contract call
533
- * @param params Any additional parameters for the call
534
- * @returns The result of the call: The total supply of the token
1132
+ * @param params The params for the smart contract call
1133
+ * @returns The call result: The name of the token
535
1134
  */
536
- arc200TotalSupply(args, params = {}) {
537
- return this.call(Arc200CallFactory.arc200TotalSupply(args, params));
1135
+ async arc200Name(params = {
1136
+ args: []
1137
+ }) {
1138
+ const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Name(params));
1139
+ return result.return;
538
1140
  }
539
1141
  /**
540
- * Calls the arc200_balanceOf(address)uint256 ABI method.
1142
+ * Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_symbol()byte[8]` ABI method.
541
1143
  *
542
- * Returns the current balance of the owner of the token
1144
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1145
+ *
1146
+ * Returns the symbol of the token
543
1147
  *
544
- * @param args The arguments for the contract call
545
- * @param params Any additional parameters for the call
546
- * @returns The result of the call: The current balance of the holder of the token
1148
+ * @param params The params for the smart contract call
1149
+ * @returns The call result: The symbol of the token
547
1150
  */
548
- arc200BalanceOf(args, params = {}) {
549
- return this.call(Arc200CallFactory.arc200BalanceOf(args, params));
1151
+ async arc200Symbol(params = {
1152
+ args: []
1153
+ }) {
1154
+ const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Symbol(params));
1155
+ return result.return;
550
1156
  }
551
1157
  /**
552
- * Calls the arc200_transfer(address,uint256)bool ABI method.
1158
+ * Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_decimals()uint8` ABI method.
553
1159
  *
554
- * Transfers tokens
1160
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1161
+ *
1162
+ * Returns the decimals of the token
555
1163
  *
556
- * @param args The arguments for the contract call
557
- * @param params Any additional parameters for the call
558
- * @returns The result of the call: Success
1164
+ * @param params The params for the smart contract call
1165
+ * @returns The call result: The decimals of the token
559
1166
  */
560
- arc200Transfer(args, params = {}) {
561
- return this.call(Arc200CallFactory.arc200Transfer(args, params));
1167
+ async arc200Decimals(params = {
1168
+ args: []
1169
+ }) {
1170
+ const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Decimals(params));
1171
+ return result.return;
562
1172
  }
563
1173
  /**
564
- * Calls the arc200_transferFrom(address,address,uint256)bool ABI method.
1174
+ * Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_totalSupply()uint256` ABI method.
565
1175
  *
566
- * Transfers tokens from source to destination as approved spender
1176
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1177
+ *
1178
+ * Returns the total supply of the token
567
1179
  *
568
- * @param args The arguments for the contract call
569
- * @param params Any additional parameters for the call
570
- * @returns The result of the call: Success
1180
+ * @param params The params for the smart contract call
1181
+ * @returns The call result: The total supply of the token
571
1182
  */
572
- arc200TransferFrom(args, params = {}) {
573
- return this.call(Arc200CallFactory.arc200TransferFrom(args, params));
1183
+ async arc200TotalSupply(params = { args: [] }) {
1184
+ const result = await this.appClient.send.call(Arc200ParamsFactory.arc200TotalSupply(params));
1185
+ return result.return;
574
1186
  }
575
1187
  /**
576
- * Calls the arc200_approve(address,uint256)bool ABI method.
1188
+ * Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_balanceOf(address)uint256` ABI method.
577
1189
  *
578
- * Approve spender for a token
1190
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
1191
+ *
1192
+ * Returns the current balance of the owner of the token
579
1193
  *
580
- * @param args The arguments for the contract call
581
- * @param params Any additional parameters for the call
582
- * @returns The result of the call: Success
1194
+ * @param params The params for the smart contract call
1195
+ * @returns The call result: The current balance of the holder of the token
583
1196
  */
584
- arc200Approve(args, params = {}) {
585
- return this.call(Arc200CallFactory.arc200Approve(args, params));
1197
+ async arc200BalanceOf(params) {
1198
+ const result = await this.appClient.send.call(Arc200ParamsFactory.arc200BalanceOf(params));
1199
+ return result.return;
586
1200
  }
587
1201
  /**
588
- * Calls the arc200_allowance(address,address)uint256 ABI method.
1202
+ * Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_allowance(address,address)uint256` ABI method.
1203
+ *
1204
+ * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.
589
1205
  *
590
1206
  * Returns the current allowance of the spender of the tokens of the owner
591
1207
  *
592
- * @param args The arguments for the contract call
593
- * @param params Any additional parameters for the call
594
- * @returns The result of the call: The remaining allowance
1208
+ * @param params The params for the smart contract call
1209
+ * @returns The call result: The remaining allowance
595
1210
  */
596
- arc200Allowance(args, params = {}) {
597
- return this.call(Arc200CallFactory.arc200Allowance(args, params));
1211
+ async arc200Allowance(params) {
1212
+ const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Allowance(params));
1213
+ return result.return;
598
1214
  }
599
- compose() {
1215
+ newGroup() {
600
1216
  const client = this;
601
- const atc = new AtomicTransactionComposer();
1217
+ const composer = this.algorand.newGroup();
602
1218
  let promiseChain = Promise.resolve();
603
1219
  const resultMappers = [];
604
1220
  return {
605
- arc200Name(args, params) {
606
- promiseChain = promiseChain.then(() => client.arc200Name(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
607
- resultMappers.push(void 0);
1221
+ /**
1222
+ * Add a bootstrap(byte[],byte[],uint8,uint256)bool method call against the Arc200 contract
1223
+ */
1224
+ bootstrap(params) {
1225
+ promiseChain = promiseChain.then(
1226
+ async () => composer.addAppCallMethodCall(await client.params.bootstrap(params))
1227
+ );
1228
+ resultMappers.push((v) => client.decodeReturnValue("bootstrap(byte[],byte[],uint8,uint256)bool", v));
608
1229
  return this;
609
1230
  },
610
- arc200Symbol(args, params) {
611
- promiseChain = promiseChain.then(() => client.arc200Symbol(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
612
- resultMappers.push(void 0);
1231
+ /**
1232
+ * Add a arc200_name()byte[32] method call against the Arc200 contract
1233
+ */
1234
+ arc200Name(params) {
1235
+ promiseChain = promiseChain.then(
1236
+ async () => composer.addAppCallMethodCall(await client.params.arc200Name(params))
1237
+ );
1238
+ resultMappers.push((v) => client.decodeReturnValue("arc200_name()byte[32]", v));
1239
+ return this;
1240
+ },
1241
+ /**
1242
+ * Add a arc200_symbol()byte[8] method call against the Arc200 contract
1243
+ */
1244
+ arc200Symbol(params) {
1245
+ promiseChain = promiseChain.then(
1246
+ async () => composer.addAppCallMethodCall(await client.params.arc200Symbol(params))
1247
+ );
1248
+ resultMappers.push((v) => client.decodeReturnValue("arc200_symbol()byte[8]", v));
613
1249
  return this;
614
1250
  },
615
- arc200Decimals(args, params) {
616
- promiseChain = promiseChain.then(() => client.arc200Decimals(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
617
- resultMappers.push(void 0);
1251
+ /**
1252
+ * Add a arc200_decimals()uint8 method call against the Arc200 contract
1253
+ */
1254
+ arc200Decimals(params) {
1255
+ promiseChain = promiseChain.then(
1256
+ async () => composer.addAppCallMethodCall(await client.params.arc200Decimals(params))
1257
+ );
1258
+ resultMappers.push((v) => client.decodeReturnValue("arc200_decimals()uint8", v));
618
1259
  return this;
619
1260
  },
620
- arc200TotalSupply(args, params) {
621
- promiseChain = promiseChain.then(() => client.arc200TotalSupply(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
622
- resultMappers.push(void 0);
1261
+ /**
1262
+ * Add a arc200_totalSupply()uint256 method call against the Arc200 contract
1263
+ */
1264
+ arc200TotalSupply(params) {
1265
+ promiseChain = promiseChain.then(
1266
+ async () => composer.addAppCallMethodCall(await client.params.arc200TotalSupply(params))
1267
+ );
1268
+ resultMappers.push((v) => client.decodeReturnValue("arc200_totalSupply()uint256", v));
623
1269
  return this;
624
1270
  },
625
- arc200BalanceOf(args, params) {
626
- promiseChain = promiseChain.then(() => client.arc200BalanceOf(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
627
- resultMappers.push(void 0);
1271
+ /**
1272
+ * Add a arc200_balanceOf(address)uint256 method call against the Arc200 contract
1273
+ */
1274
+ arc200BalanceOf(params) {
1275
+ promiseChain = promiseChain.then(
1276
+ async () => composer.addAppCallMethodCall(await client.params.arc200BalanceOf(params))
1277
+ );
1278
+ resultMappers.push((v) => client.decodeReturnValue("arc200_balanceOf(address)uint256", v));
628
1279
  return this;
629
1280
  },
630
- arc200Transfer(args, params) {
631
- promiseChain = promiseChain.then(() => client.arc200Transfer(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
632
- resultMappers.push(void 0);
1281
+ /**
1282
+ * Add a arc200_transfer(address,uint256)bool method call against the Arc200 contract
1283
+ */
1284
+ arc200Transfer(params) {
1285
+ promiseChain = promiseChain.then(
1286
+ async () => composer.addAppCallMethodCall(await client.params.arc200Transfer(params))
1287
+ );
1288
+ resultMappers.push((v) => client.decodeReturnValue("arc200_transfer(address,uint256)bool", v));
633
1289
  return this;
634
1290
  },
635
- arc200TransferFrom(args, params) {
636
- promiseChain = promiseChain.then(() => client.arc200TransferFrom(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
637
- resultMappers.push(void 0);
1291
+ /**
1292
+ * Add a arc200_transferFrom(address,address,uint256)bool method call against the Arc200 contract
1293
+ */
1294
+ arc200TransferFrom(params) {
1295
+ promiseChain = promiseChain.then(
1296
+ async () => composer.addAppCallMethodCall(await client.params.arc200TransferFrom(params))
1297
+ );
1298
+ resultMappers.push((v) => client.decodeReturnValue("arc200_transferFrom(address,address,uint256)bool", v));
638
1299
  return this;
639
1300
  },
640
- arc200Approve(args, params) {
641
- promiseChain = promiseChain.then(() => client.arc200Approve(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
642
- resultMappers.push(void 0);
1301
+ /**
1302
+ * Add a arc200_approve(address,uint256)bool method call against the Arc200 contract
1303
+ */
1304
+ arc200Approve(params) {
1305
+ promiseChain = promiseChain.then(
1306
+ async () => composer.addAppCallMethodCall(await client.params.arc200Approve(params))
1307
+ );
1308
+ resultMappers.push((v) => client.decodeReturnValue("arc200_approve(address,uint256)bool", v));
643
1309
  return this;
644
1310
  },
645
- arc200Allowance(args, params) {
646
- promiseChain = promiseChain.then(() => client.arc200Allowance(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
647
- resultMappers.push(void 0);
1311
+ /**
1312
+ * Add a arc200_allowance(address,address)uint256 method call against the Arc200 contract
1313
+ */
1314
+ arc200Allowance(params) {
1315
+ promiseChain = promiseChain.then(
1316
+ async () => composer.addAppCallMethodCall(await client.params.arc200Allowance(params))
1317
+ );
1318
+ resultMappers.push((v) => client.decodeReturnValue("arc200_allowance(address,address)uint256", v));
648
1319
  return this;
649
1320
  },
650
- clearState(args) {
651
- promiseChain = promiseChain.then(() => client.clearState({ ...args, sendParams: { ...args?.sendParams, skipSending: true, atc } }));
652
- resultMappers.push(void 0);
1321
+ /**
1322
+ * Add a clear state call to the Arc200 contract
1323
+ */
1324
+ clearState(params) {
1325
+ promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params)));
653
1326
  return this;
654
1327
  },
655
- addTransaction(txn, defaultSender) {
656
- promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit.getTransactionWithSigner(txn, defaultSender ?? client.sender)));
1328
+ addTransaction(txn, signer) {
1329
+ promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer));
657
1330
  return this;
658
1331
  },
659
- async atc() {
1332
+ async composer() {
660
1333
  await promiseChain;
661
- return atc;
1334
+ return composer;
662
1335
  },
663
1336
  async simulate(options) {
664
1337
  await promiseChain;
665
- const result = await atc.simulate(client.algod, new modelsv2.SimulateRequest({ txnGroups: [], ...options }));
1338
+ const result = await (!options ? composer.simulate() : composer.simulate(options));
666
1339
  return {
667
1340
  ...result,
668
- returns: result.methodResults?.map((val, i) => resultMappers[i] !== void 0 ? resultMappers[i](val.returnValue) : val.returnValue)
1341
+ returns: result.returns?.map(
1342
+ (val, i) => resultMappers[i] !== void 0 ? resultMappers[i](val) : val.returnValue
1343
+ )
669
1344
  };
670
1345
  },
671
- async execute() {
1346
+ async send(params) {
672
1347
  await promiseChain;
673
- const result = await algokit.sendAtomicTransactionComposer({ atc, sendParams: {} }, client.algod);
1348
+ const result = await composer.send(params);
674
1349
  return {
675
1350
  ...result,
676
- returns: result.returns?.map((val, i) => resultMappers[i] !== void 0 ? resultMappers[i](val.returnValue) : val.returnValue)
1351
+ returns: result.returns?.map(
1352
+ (val, i) => resultMappers[i] !== void 0 ? resultMappers[i](val) : val.returnValue
1353
+ )
677
1354
  };
678
1355
  }
679
1356
  };
@@ -682,17 +1359,19 @@ var Arc200Client = class {
682
1359
 
683
1360
  // src/getArc200Client.ts
684
1361
  var getArc200Client = (input) => {
685
- return new Arc200Client(
686
- {
687
- sender: input.sender,
688
- resolveBy: "id",
689
- id: input.appId
690
- },
691
- input.algod
692
- );
1362
+ return new Arc200Client({
1363
+ algorand: input.algorand,
1364
+ appId: input.appId,
1365
+ appName: input.appName,
1366
+ approvalSourceMap: input.approvalSourceMap,
1367
+ clearSourceMap: input.clearSourceMap,
1368
+ defaultSender: input.defaultSender,
1369
+ defaultSigner: input.defaultSigner
1370
+ });
693
1371
  };
694
- var getArc200Client_default = getArc200Client;
695
1372
  export {
696
- getArc200Client_default as getArc200Client
1373
+ Arc200Client,
1374
+ Arc200Factory,
1375
+ getArc200Client
697
1376
  };
698
1377
  //# sourceMappingURL=index.mjs.map