forked from PennCIS233/Practical-HW1
-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathIntroToBlockchainNFT.json
More file actions
437 lines (437 loc) · 56.2 KB
/
IntroToBlockchainNFT.json
File metadata and controls
437 lines (437 loc) · 56.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
{
"_format": "hh-sol-artifact-1",
"contractName": "Web3SecCourseNFT",
"sourceName": "Web3SecCourseNFT.sol",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "approved",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "ApprovalForAll",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "AddressBook",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "approve",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "name",
"type": "string"
}
],
"name": "enterAddressIntoBook",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getApproved",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "mintNFT",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ownerOf",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "tokenURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x6080604052604051806060016040528060358152602001620030d1603591396009908051906020019062000035929190620001d8565b503480156200004357600080fd5b506040518060400160405280601081526020017f57656233536563436f757273654e4654000000000000000000000000000000008152506040518060400160405280600781526020017f576562334e4654000000000000000000000000000000000000000000000000008152508160009080519060200190620000c8929190620001d8565b508060019080519060200190620000e1929190620001d8565b50505062000104620000f86200010a60201b60201c565b6200011260201b60201c565b620002ed565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001e69062000288565b90600052602060002090601f0160209004810192826200020a576000855562000256565b82601f106200022557805160ff191683800117855562000256565b8280016001018555821562000256579182015b828111156200025557825182559160200191906001019062000238565b5b50905062000265919062000269565b5090565b5b80821115620002845760008160009055506001016200026a565b5090565b60006002820490506001821680620002a157607f821691505b60208210811415620002b857620002b7620002be565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612dd480620002fd6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80636352211e116100ad578063a22cb46511610071578063a22cb465146102f4578063b88d4fde14610310578063c87b56dd1461032c578063e985e9c51461035c578063f2fde38b1461038c57610121565b80636352211e1461024e57806370a082311461027e578063715018a6146102ae5780638da5cb5b146102b857806395d89b41146102d657610121565b806314f710fe116100f457806314f710fe146101c05780632251cda4146101ca57806323b872dd146101fa57806342842e0e146102165780634ff694cf1461023257610121565b806301ffc9a71461012657806306fdde0314610156578063081812fc14610174578063095ea7b3146101a4575b600080fd5b610140600480360381019061013b9190611fb0565b6103a8565b60405161014d91906123b1565b60405180910390f35b61015e61048a565b60405161016b91906123cc565b60405180910390f35b61018e60048036038101906101899190612043565b61051c565b60405161019b919061234a565b60405180910390f35b6101be60048036038101906101b99190611f74565b610562565b005b6101c861067a565b005b6101e460048036038101906101df9190611e09565b6107b0565b6040516101f191906123cc565b60405180910390f35b610214600480360381019061020f9190611e6e565b610850565b005b610230600480360381019061022b9190611e6e565b6108b0565b005b61024c60048036038101906102479190612002565b6108d0565b005b61026860048036038101906102639190612043565b610927565b604051610275919061234a565b60405180910390f35b61029860048036038101906102939190611e09565b6109d9565b6040516102a591906125ae565b60405180910390f35b6102b6610a91565b005b6102c0610aa5565b6040516102cd919061234a565b60405180910390f35b6102de610acf565b6040516102eb91906123cc565b60405180910390f35b61030e60048036038101906103099190611f38565b610b61565b005b61032a60048036038101906103259190611ebd565b610b77565b005b61034660048036038101906103419190612043565b610bd9565b60405161035391906123cc565b60405180910390f35b61037660048036038101906103719190611e32565b610cec565b60405161038391906123b1565b60405180910390f35b6103a660048036038101906103a19190611e09565b610d80565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061047357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610483575061048282610e04565b5b9050919050565b60606000805461049990612804565b80601f01602080910402602001604051908101604052809291908181526020018280546104c590612804565b80156105125780601f106104e757610100808354040283529160200191610512565b820191906000526020600020905b8154815290600101906020018083116104f557829003601f168201915b5050505050905090565b600061052782610e6e565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061056d82610927565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d59061256e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166105fd610eb9565b73ffffffffffffffffffffffffffffffffffffffff16148061062c575061062b81610626610eb9565b610cec565b5b61066b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610662906124ee565b60405180910390fd5b6106758383610ec1565b505050565b336000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080546106c790612804565b9050116106d357600080fd5b60085460016008546106e59190612693565b116106ef57600080fd5b6008600081548092919061070290612867565b9190505550600060085490506107183382610f7a565b6107ac816009805461072990612804565b80601f016020809104026020016040519081016040528092919081815260200182805461075590612804565b80156107a25780601f10610777576101008083540402835291602001916107a2565b820191906000526020600020905b81548152906001019060200180831161078557829003601f168201915b5050505050611154565b5050565b600a60205280600052604060002060009150905080546107cf90612804565b80601f01602080910402602001604051908101604052809291908181526020018280546107fb90612804565b80156108485780601f1061081d57610100808354040283529160200191610848565b820191906000526020600020905b81548152906001019060200180831161082b57829003601f168201915b505050505081565b61086161085b610eb9565b826111c8565b6108a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108979061258e565b60405180910390fd5b6108ab83838361125d565b505050565b6108cb83838360405180602001604052806000815250610b77565b505050565b80600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209080519060200190610923929190611c2d565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c79061254e565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a41906124ae565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a996114c4565b610aa36000611542565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610ade90612804565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0a90612804565b8015610b575780601f10610b2c57610100808354040283529160200191610b57565b820191906000526020600020905b815481529060010190602001808311610b3a57829003601f168201915b5050505050905090565b610b73610b6c610eb9565b8383611608565b5050565b610b88610b82610eb9565b836111c8565b610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe9061258e565b60405180910390fd5b610bd384848484611775565b50505050565b6060610be482610e6e565b6000600660008481526020019081526020016000208054610c0490612804565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3090612804565b8015610c7d5780601f10610c5257610100808354040283529160200191610c7d565b820191906000526020600020905b815481529060010190602001808311610c6057829003601f168201915b505050505090506000610c8e6117d1565b9050600081511415610ca4578192505050610ce7565b600082511115610cd9578082604051602001610cc1929190612326565b60405160208183030381529060405292505050610ce7565b610ce2846117e8565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610d886114c4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610def9061240e565b60405180910390fd5b610e0181611542565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610e7781611850565b610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead9061254e565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610f3483610927565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe19061250e565b60405180910390fd5b610ff381611850565b15611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a9061244e565b60405180910390fd5b61103f600083836118bc565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461108f9190612693565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611150600083836118c1565b5050565b61115d82611850565b61119c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611193906124ce565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906111c3929190611c2d565b505050565b6000806111d483610927565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061121657506112158185610cec565b5b8061125457508373ffffffffffffffffffffffffffffffffffffffff1661123c8461051c565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661127d82610927565b73ffffffffffffffffffffffffffffffffffffffff16146112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ca9061242e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a9061246e565b60405180910390fd5b61134e8383836118bc565b611359600082610ec1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113a9919061271a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114009190612693565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46114bf8383836118c1565b505050565b6114cc610eb9565b73ffffffffffffffffffffffffffffffffffffffff166114ea610aa5565b73ffffffffffffffffffffffffffffffffffffffff1614611540576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115379061252e565b60405180910390fd5b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166e9061248e565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161176891906123b1565b60405180910390a3505050565b61178084848461125d565b61178c848484846118c6565b6117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c2906123ee565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606117f382610e6e565b60006117fd6117d1565b9050600081511161181d5760405180602001604052806000815250611848565b8061182784611a5d565b604051602001611838929190612326565b6040516020818303038152906040525b915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b60006118e78473ffffffffffffffffffffffffffffffffffffffff16611c0a565b15611a50578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611910610eb9565b8786866040518563ffffffff1660e01b81526004016119329493929190612365565b602060405180830381600087803b15801561194c57600080fd5b505af192505050801561197d57506040513d601f19601f8201168201806040525081019061197a9190611fd9565b60015b611a00573d80600081146119ad576040519150601f19603f3d011682016040523d82523d6000602084013e6119b2565b606091505b506000815114156119f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ef906123ee565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611a55565b600190505b949350505050565b60606000821415611aa5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611c05565b600082905060005b60008214611ad7578080611ac090612867565b915050600a82611ad091906126e9565b9150611aad565b60008167ffffffffffffffff811115611b19577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b4b5781602001600182028036833780820191505090505b5090505b60008514611bfe57600182611b64919061271a565b9150600a85611b7391906128b0565b6030611b7f9190612693565b60f81b818381518110611bbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611bf791906126e9565b9450611b4f565b8093505050505b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611c3990612804565b90600052602060002090601f016020900481019282611c5b5760008555611ca2565b82601f10611c7457805160ff1916838001178555611ca2565b82800160010185558215611ca2579182015b82811115611ca1578251825591602001919060010190611c86565b5b509050611caf9190611cb3565b5090565b5b80821115611ccc576000816000905550600101611cb4565b5090565b6000611ce3611cde846125ee565b6125c9565b905082815260208101848484011115611cfb57600080fd5b611d068482856127c2565b509392505050565b6000611d21611d1c8461261f565b6125c9565b905082815260208101848484011115611d3957600080fd5b611d448482856127c2565b509392505050565b600081359050611d5b81612d42565b92915050565b600081359050611d7081612d59565b92915050565b600081359050611d8581612d70565b92915050565b600081519050611d9a81612d70565b92915050565b600082601f830112611db157600080fd5b8135611dc1848260208601611cd0565b91505092915050565b600082601f830112611ddb57600080fd5b8135611deb848260208601611d0e565b91505092915050565b600081359050611e0381612d87565b92915050565b600060208284031215611e1b57600080fd5b6000611e2984828501611d4c565b91505092915050565b60008060408385031215611e4557600080fd5b6000611e5385828601611d4c565b9250506020611e6485828601611d4c565b9150509250929050565b600080600060608486031215611e8357600080fd5b6000611e9186828701611d4c565b9350506020611ea286828701611d4c565b9250506040611eb386828701611df4565b9150509250925092565b60008060008060808587031215611ed357600080fd5b6000611ee187828801611d4c565b9450506020611ef287828801611d4c565b9350506040611f0387828801611df4565b925050606085013567ffffffffffffffff811115611f2057600080fd5b611f2c87828801611da0565b91505092959194509250565b60008060408385031215611f4b57600080fd5b6000611f5985828601611d4c565b9250506020611f6a85828601611d61565b9150509250929050565b60008060408385031215611f8757600080fd5b6000611f9585828601611d4c565b9250506020611fa685828601611df4565b9150509250929050565b600060208284031215611fc257600080fd5b6000611fd084828501611d76565b91505092915050565b600060208284031215611feb57600080fd5b6000611ff984828501611d8b565b91505092915050565b60006020828403121561201457600080fd5b600082013567ffffffffffffffff81111561202e57600080fd5b61203a84828501611dca565b91505092915050565b60006020828403121561205557600080fd5b600061206384828501611df4565b91505092915050565b6120758161274e565b82525050565b61208481612760565b82525050565b600061209582612650565b61209f8185612666565b93506120af8185602086016127d1565b6120b88161299d565b840191505092915050565b60006120ce8261265b565b6120d88185612677565b93506120e88185602086016127d1565b6120f18161299d565b840191505092915050565b60006121078261265b565b6121118185612688565b93506121218185602086016127d1565b80840191505092915050565b600061213a603283612677565b9150612145826129ae565b604082019050919050565b600061215d602683612677565b9150612168826129fd565b604082019050919050565b6000612180602583612677565b915061218b82612a4c565b604082019050919050565b60006121a3601c83612677565b91506121ae82612a9b565b602082019050919050565b60006121c6602483612677565b91506121d182612ac4565b604082019050919050565b60006121e9601983612677565b91506121f482612b13565b602082019050919050565b600061220c602983612677565b915061221782612b3c565b604082019050919050565b600061222f602e83612677565b915061223a82612b8b565b604082019050919050565b6000612252603e83612677565b915061225d82612bda565b604082019050919050565b6000612275602083612677565b915061228082612c29565b602082019050919050565b6000612298602083612677565b91506122a382612c52565b602082019050919050565b60006122bb601883612677565b91506122c682612c7b565b602082019050919050565b60006122de602183612677565b91506122e982612ca4565b604082019050919050565b6000612301602e83612677565b915061230c82612cf3565b604082019050919050565b612320816127b8565b82525050565b600061233282856120fc565b915061233e82846120fc565b91508190509392505050565b600060208201905061235f600083018461206c565b92915050565b600060808201905061237a600083018761206c565b612387602083018661206c565b6123946040830185612317565b81810360608301526123a6818461208a565b905095945050505050565b60006020820190506123c6600083018461207b565b92915050565b600060208201905081810360008301526123e681846120c3565b905092915050565b600060208201905081810360008301526124078161212d565b9050919050565b6000602082019050818103600083015261242781612150565b9050919050565b6000602082019050818103600083015261244781612173565b9050919050565b6000602082019050818103600083015261246781612196565b9050919050565b60006020820190508181036000830152612487816121b9565b9050919050565b600060208201905081810360008301526124a7816121dc565b9050919050565b600060208201905081810360008301526124c7816121ff565b9050919050565b600060208201905081810360008301526124e781612222565b9050919050565b6000602082019050818103600083015261250781612245565b9050919050565b6000602082019050818103600083015261252781612268565b9050919050565b600060208201905081810360008301526125478161228b565b9050919050565b60006020820190508181036000830152612567816122ae565b9050919050565b60006020820190508181036000830152612587816122d1565b9050919050565b600060208201905081810360008301526125a7816122f4565b9050919050565b60006020820190506125c36000830184612317565b92915050565b60006125d36125e4565b90506125df8282612836565b919050565b6000604051905090565b600067ffffffffffffffff8211156126095761260861296e565b5b6126128261299d565b9050602081019050919050565b600067ffffffffffffffff82111561263a5761263961296e565b5b6126438261299d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061269e826127b8565b91506126a9836127b8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126de576126dd6128e1565b5b828201905092915050565b60006126f4826127b8565b91506126ff836127b8565b92508261270f5761270e612910565b5b828204905092915050565b6000612725826127b8565b9150612730836127b8565b925082821015612743576127426128e1565b5b828203905092915050565b600061275982612798565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156127ef5780820151818401526020810190506127d4565b838111156127fe576000848401525b50505050565b6000600282049050600182168061281c57607f821691505b602082108114156128305761282f61293f565b5b50919050565b61283f8261299d565b810181811067ffffffffffffffff8211171561285e5761285d61296e565b5b80604052505050565b6000612872826127b8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156128a5576128a46128e1565b5b600182019050919050565b60006128bb826127b8565b91506128c6836127b8565b9250826128d6576128d5612910565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b612d4b8161274e565b8114612d5657600080fd5b50565b612d6281612760565b8114612d6d57600080fd5b50565b612d798161276c565b8114612d8457600080fd5b50565b612d90816127b8565b8114612d9b57600080fd5b5056fea2646970667358221220907bde19524b1c74509621f15d8c2fc71cb61d9dc765c6c40e3a92fed9926b4a64736f6c63430008010033697066733a2f2f516d5a54326a6a4a594b5131536265456f34427a61537767684a79784b716a4d6f43766e3634707579475851434d",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101215760003560e01c80636352211e116100ad578063a22cb46511610071578063a22cb465146102f4578063b88d4fde14610310578063c87b56dd1461032c578063e985e9c51461035c578063f2fde38b1461038c57610121565b80636352211e1461024e57806370a082311461027e578063715018a6146102ae5780638da5cb5b146102b857806395d89b41146102d657610121565b806314f710fe116100f457806314f710fe146101c05780632251cda4146101ca57806323b872dd146101fa57806342842e0e146102165780634ff694cf1461023257610121565b806301ffc9a71461012657806306fdde0314610156578063081812fc14610174578063095ea7b3146101a4575b600080fd5b610140600480360381019061013b9190611fb0565b6103a8565b60405161014d91906123b1565b60405180910390f35b61015e61048a565b60405161016b91906123cc565b60405180910390f35b61018e60048036038101906101899190612043565b61051c565b60405161019b919061234a565b60405180910390f35b6101be60048036038101906101b99190611f74565b610562565b005b6101c861067a565b005b6101e460048036038101906101df9190611e09565b6107b0565b6040516101f191906123cc565b60405180910390f35b610214600480360381019061020f9190611e6e565b610850565b005b610230600480360381019061022b9190611e6e565b6108b0565b005b61024c60048036038101906102479190612002565b6108d0565b005b61026860048036038101906102639190612043565b610927565b604051610275919061234a565b60405180910390f35b61029860048036038101906102939190611e09565b6109d9565b6040516102a591906125ae565b60405180910390f35b6102b6610a91565b005b6102c0610aa5565b6040516102cd919061234a565b60405180910390f35b6102de610acf565b6040516102eb91906123cc565b60405180910390f35b61030e60048036038101906103099190611f38565b610b61565b005b61032a60048036038101906103259190611ebd565b610b77565b005b61034660048036038101906103419190612043565b610bd9565b60405161035391906123cc565b60405180910390f35b61037660048036038101906103719190611e32565b610cec565b60405161038391906123b1565b60405180910390f35b6103a660048036038101906103a19190611e09565b610d80565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061047357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610483575061048282610e04565b5b9050919050565b60606000805461049990612804565b80601f01602080910402602001604051908101604052809291908181526020018280546104c590612804565b80156105125780601f106104e757610100808354040283529160200191610512565b820191906000526020600020905b8154815290600101906020018083116104f557829003601f168201915b5050505050905090565b600061052782610e6e565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061056d82610927565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d59061256e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166105fd610eb9565b73ffffffffffffffffffffffffffffffffffffffff16148061062c575061062b81610626610eb9565b610cec565b5b61066b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610662906124ee565b60405180910390fd5b6106758383610ec1565b505050565b336000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080546106c790612804565b9050116106d357600080fd5b60085460016008546106e59190612693565b116106ef57600080fd5b6008600081548092919061070290612867565b9190505550600060085490506107183382610f7a565b6107ac816009805461072990612804565b80601f016020809104026020016040519081016040528092919081815260200182805461075590612804565b80156107a25780601f10610777576101008083540402835291602001916107a2565b820191906000526020600020905b81548152906001019060200180831161078557829003601f168201915b5050505050611154565b5050565b600a60205280600052604060002060009150905080546107cf90612804565b80601f01602080910402602001604051908101604052809291908181526020018280546107fb90612804565b80156108485780601f1061081d57610100808354040283529160200191610848565b820191906000526020600020905b81548152906001019060200180831161082b57829003601f168201915b505050505081565b61086161085b610eb9565b826111c8565b6108a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108979061258e565b60405180910390fd5b6108ab83838361125d565b505050565b6108cb83838360405180602001604052806000815250610b77565b505050565b80600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209080519060200190610923929190611c2d565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c79061254e565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a41906124ae565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a996114c4565b610aa36000611542565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610ade90612804565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0a90612804565b8015610b575780601f10610b2c57610100808354040283529160200191610b57565b820191906000526020600020905b815481529060010190602001808311610b3a57829003601f168201915b5050505050905090565b610b73610b6c610eb9565b8383611608565b5050565b610b88610b82610eb9565b836111c8565b610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe9061258e565b60405180910390fd5b610bd384848484611775565b50505050565b6060610be482610e6e565b6000600660008481526020019081526020016000208054610c0490612804565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3090612804565b8015610c7d5780601f10610c5257610100808354040283529160200191610c7d565b820191906000526020600020905b815481529060010190602001808311610c6057829003601f168201915b505050505090506000610c8e6117d1565b9050600081511415610ca4578192505050610ce7565b600082511115610cd9578082604051602001610cc1929190612326565b60405160208183030381529060405292505050610ce7565b610ce2846117e8565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610d886114c4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610def9061240e565b60405180910390fd5b610e0181611542565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610e7781611850565b610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead9061254e565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610f3483610927565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe19061250e565b60405180910390fd5b610ff381611850565b15611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a9061244e565b60405180910390fd5b61103f600083836118bc565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461108f9190612693565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611150600083836118c1565b5050565b61115d82611850565b61119c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611193906124ce565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906111c3929190611c2d565b505050565b6000806111d483610927565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061121657506112158185610cec565b5b8061125457508373ffffffffffffffffffffffffffffffffffffffff1661123c8461051c565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661127d82610927565b73ffffffffffffffffffffffffffffffffffffffff16146112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ca9061242e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a9061246e565b60405180910390fd5b61134e8383836118bc565b611359600082610ec1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113a9919061271a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114009190612693565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46114bf8383836118c1565b505050565b6114cc610eb9565b73ffffffffffffffffffffffffffffffffffffffff166114ea610aa5565b73ffffffffffffffffffffffffffffffffffffffff1614611540576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115379061252e565b60405180910390fd5b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166e9061248e565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161176891906123b1565b60405180910390a3505050565b61178084848461125d565b61178c848484846118c6565b6117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c2906123ee565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606117f382610e6e565b60006117fd6117d1565b9050600081511161181d5760405180602001604052806000815250611848565b8061182784611a5d565b604051602001611838929190612326565b6040516020818303038152906040525b915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b60006118e78473ffffffffffffffffffffffffffffffffffffffff16611c0a565b15611a50578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611910610eb9565b8786866040518563ffffffff1660e01b81526004016119329493929190612365565b602060405180830381600087803b15801561194c57600080fd5b505af192505050801561197d57506040513d601f19601f8201168201806040525081019061197a9190611fd9565b60015b611a00573d80600081146119ad576040519150601f19603f3d011682016040523d82523d6000602084013e6119b2565b606091505b506000815114156119f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ef906123ee565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611a55565b600190505b949350505050565b60606000821415611aa5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611c05565b600082905060005b60008214611ad7578080611ac090612867565b915050600a82611ad091906126e9565b9150611aad565b60008167ffffffffffffffff811115611b19577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b4b5781602001600182028036833780820191505090505b5090505b60008514611bfe57600182611b64919061271a565b9150600a85611b7391906128b0565b6030611b7f9190612693565b60f81b818381518110611bbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611bf791906126e9565b9450611b4f565b8093505050505b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611c3990612804565b90600052602060002090601f016020900481019282611c5b5760008555611ca2565b82601f10611c7457805160ff1916838001178555611ca2565b82800160010185558215611ca2579182015b82811115611ca1578251825591602001919060010190611c86565b5b509050611caf9190611cb3565b5090565b5b80821115611ccc576000816000905550600101611cb4565b5090565b6000611ce3611cde846125ee565b6125c9565b905082815260208101848484011115611cfb57600080fd5b611d068482856127c2565b509392505050565b6000611d21611d1c8461261f565b6125c9565b905082815260208101848484011115611d3957600080fd5b611d448482856127c2565b509392505050565b600081359050611d5b81612d42565b92915050565b600081359050611d7081612d59565b92915050565b600081359050611d8581612d70565b92915050565b600081519050611d9a81612d70565b92915050565b600082601f830112611db157600080fd5b8135611dc1848260208601611cd0565b91505092915050565b600082601f830112611ddb57600080fd5b8135611deb848260208601611d0e565b91505092915050565b600081359050611e0381612d87565b92915050565b600060208284031215611e1b57600080fd5b6000611e2984828501611d4c565b91505092915050565b60008060408385031215611e4557600080fd5b6000611e5385828601611d4c565b9250506020611e6485828601611d4c565b9150509250929050565b600080600060608486031215611e8357600080fd5b6000611e9186828701611d4c565b9350506020611ea286828701611d4c565b9250506040611eb386828701611df4565b9150509250925092565b60008060008060808587031215611ed357600080fd5b6000611ee187828801611d4c565b9450506020611ef287828801611d4c565b9350506040611f0387828801611df4565b925050606085013567ffffffffffffffff811115611f2057600080fd5b611f2c87828801611da0565b91505092959194509250565b60008060408385031215611f4b57600080fd5b6000611f5985828601611d4c565b9250506020611f6a85828601611d61565b9150509250929050565b60008060408385031215611f8757600080fd5b6000611f9585828601611d4c565b9250506020611fa685828601611df4565b9150509250929050565b600060208284031215611fc257600080fd5b6000611fd084828501611d76565b91505092915050565b600060208284031215611feb57600080fd5b6000611ff984828501611d8b565b91505092915050565b60006020828403121561201457600080fd5b600082013567ffffffffffffffff81111561202e57600080fd5b61203a84828501611dca565b91505092915050565b60006020828403121561205557600080fd5b600061206384828501611df4565b91505092915050565b6120758161274e565b82525050565b61208481612760565b82525050565b600061209582612650565b61209f8185612666565b93506120af8185602086016127d1565b6120b88161299d565b840191505092915050565b60006120ce8261265b565b6120d88185612677565b93506120e88185602086016127d1565b6120f18161299d565b840191505092915050565b60006121078261265b565b6121118185612688565b93506121218185602086016127d1565b80840191505092915050565b600061213a603283612677565b9150612145826129ae565b604082019050919050565b600061215d602683612677565b9150612168826129fd565b604082019050919050565b6000612180602583612677565b915061218b82612a4c565b604082019050919050565b60006121a3601c83612677565b91506121ae82612a9b565b602082019050919050565b60006121c6602483612677565b91506121d182612ac4565b604082019050919050565b60006121e9601983612677565b91506121f482612b13565b602082019050919050565b600061220c602983612677565b915061221782612b3c565b604082019050919050565b600061222f602e83612677565b915061223a82612b8b565b604082019050919050565b6000612252603e83612677565b915061225d82612bda565b604082019050919050565b6000612275602083612677565b915061228082612c29565b602082019050919050565b6000612298602083612677565b91506122a382612c52565b602082019050919050565b60006122bb601883612677565b91506122c682612c7b565b602082019050919050565b60006122de602183612677565b91506122e982612ca4565b604082019050919050565b6000612301602e83612677565b915061230c82612cf3565b604082019050919050565b612320816127b8565b82525050565b600061233282856120fc565b915061233e82846120fc565b91508190509392505050565b600060208201905061235f600083018461206c565b92915050565b600060808201905061237a600083018761206c565b612387602083018661206c565b6123946040830185612317565b81810360608301526123a6818461208a565b905095945050505050565b60006020820190506123c6600083018461207b565b92915050565b600060208201905081810360008301526123e681846120c3565b905092915050565b600060208201905081810360008301526124078161212d565b9050919050565b6000602082019050818103600083015261242781612150565b9050919050565b6000602082019050818103600083015261244781612173565b9050919050565b6000602082019050818103600083015261246781612196565b9050919050565b60006020820190508181036000830152612487816121b9565b9050919050565b600060208201905081810360008301526124a7816121dc565b9050919050565b600060208201905081810360008301526124c7816121ff565b9050919050565b600060208201905081810360008301526124e781612222565b9050919050565b6000602082019050818103600083015261250781612245565b9050919050565b6000602082019050818103600083015261252781612268565b9050919050565b600060208201905081810360008301526125478161228b565b9050919050565b60006020820190508181036000830152612567816122ae565b9050919050565b60006020820190508181036000830152612587816122d1565b9050919050565b600060208201905081810360008301526125a7816122f4565b9050919050565b60006020820190506125c36000830184612317565b92915050565b60006125d36125e4565b90506125df8282612836565b919050565b6000604051905090565b600067ffffffffffffffff8211156126095761260861296e565b5b6126128261299d565b9050602081019050919050565b600067ffffffffffffffff82111561263a5761263961296e565b5b6126438261299d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061269e826127b8565b91506126a9836127b8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126de576126dd6128e1565b5b828201905092915050565b60006126f4826127b8565b91506126ff836127b8565b92508261270f5761270e612910565b5b828204905092915050565b6000612725826127b8565b9150612730836127b8565b925082821015612743576127426128e1565b5b828203905092915050565b600061275982612798565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156127ef5780820151818401526020810190506127d4565b838111156127fe576000848401525b50505050565b6000600282049050600182168061281c57607f821691505b602082108114156128305761282f61293f565b5b50919050565b61283f8261299d565b810181811067ffffffffffffffff8211171561285e5761285d61296e565b5b80604052505050565b6000612872826127b8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156128a5576128a46128e1565b5b600182019050919050565b60006128bb826127b8565b91506128c6836127b8565b9250826128d6576128d5612910565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b612d4b8161274e565b8114612d5657600080fd5b50565b612d6281612760565b8114612d6d57600080fd5b50565b612d798161276c565b8114612d8457600080fd5b50565b612d90816127b8565b8114612d9b57600080fd5b5056fea2646970667358221220907bde19524b1c74509621f15d8c2fc71cb61d9dc765c6c40e3a92fed9926b4a64736f6c63430008010033",
"linkReferences": {},
"deployedLinkReferences": {}
}