forked from balancer/balancer-deployments
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TimelockAuthorizerMigrator.json
270 lines (270 loc) · 56.8 KB
/
TimelockAuthorizerMigrator.json
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
{
"_format": "hh-sol-artifact-1",
"contractName": "TimelockAuthorizerMigrator",
"sourceName": "contracts/TimelockAuthorizerMigrator.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_root",
"type": "address"
},
{
"internalType": "contract IBasicAuthorizer",
"name": "_oldAuthorizer",
"type": "address"
},
{
"internalType": "contract IAuthorizerAdaptorEntrypoint",
"name": "_authorizerAdaptorEntrypoint",
"type": "address"
},
{
"components": [
{
"internalType": "address",
"name": "grantee",
"type": "address"
},
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "target",
"type": "address"
}
],
"internalType": "struct TimelockAuthorizerMigrator.RoleData[]",
"name": "_rolesData",
"type": "tuple[]"
},
{
"components": [
{
"internalType": "address",
"name": "grantee",
"type": "address"
},
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "target",
"type": "address"
}
],
"internalType": "struct TimelockAuthorizerMigrator.RoleData[]",
"name": "_grantersData",
"type": "tuple[]"
},
{
"components": [
{
"internalType": "address",
"name": "grantee",
"type": "address"
},
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "target",
"type": "address"
}
],
"internalType": "struct TimelockAuthorizerMigrator.RoleData[]",
"name": "_revokersData",
"type": "tuple[]"
},
{
"components": [
{
"internalType": "bytes32",
"name": "actionId",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "newDelay",
"type": "uint256"
}
],
"internalType": "struct TimelockAuthorizerMigrator.DelayData[]",
"name": "_executeDelaysData",
"type": "tuple[]"
},
{
"components": [
{
"internalType": "bytes32",
"name": "actionId",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "newDelay",
"type": "uint256"
}
],
"internalType": "struct TimelockAuthorizerMigrator.DelayData[]",
"name": "_grantDelaysData",
"type": "tuple[]"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "CHANGE_ROOT_DELAY",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "EVERYWHERE",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "GENERAL_PERMISSION_SPECIFIER",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "executeDelays",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "finalizeMigration",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "newAuthorizer",
"outputs": [
{
"internalType": "contract TimelockAuthorizer",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "oldAuthorizer",
"outputs": [
{
"internalType": "contract IBasicAuthorizer",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "root",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "rootChangeExecutionId",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "startRootTransfer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "vault",
"outputs": [
{
"internalType": "contract IVault",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x6101006040523480156200001257600080fd5b5060405162005626380380620056268339810160408190526200003591620009c4565b600030876224ea006040516200004b906200083a565b620000599392919062000baf565b604051809103906000f08015801562000076573d6000803e3d6000fd5b506001600160601b0319606082811b821660e0528a811b821660c0528b901b1660a052604080516311b2515f60e31b815290519192506001600160a01b03891691638d928af891600480820192602092909190829003018186803b158015620000de57600080fd5b505afa158015620000f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000119919062000b1d565b60601b6001600160601b03191660805260005b8651811015620002a9576200014062000848565b8782815181106200014d57fe5b60200260200101519050896001600160a01b0316639be2a8848260200151836000015184604001516040518463ffffffff1660e01b8152600401620001959392919062000c47565b60206040518083038186803b158015620001ae57600080fd5b505afa158015620001c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e9919062000adb565b620002115760405162461bcd60e51b8152600401620002089062000cb7565b60405180910390fd5b826001600160a01b0316636f8bc596620002358360200151620007a260201b60201c565b835160408501516200024790620007e4565b6040518463ffffffff1660e01b8152600401620002679392919062000bd3565b600060405180830381600087803b1580156200028257600080fd5b505af115801562000297573d6000803e3d6000fd5b5050600190930192506200012c915050565b5060005b85518110156200037557816001600160a01b03166378a08377878381518110620002d357fe5b602002602001015160200151888481518110620002ec57fe5b6020026020010151600001518985815181106200030557fe5b60200260200101516040015160016040518563ffffffff1660e01b815260040162000334949392919062000c66565b600060405180830381600087803b1580156200034f57600080fd5b505af115801562000364573d6000803e3d6000fd5b505060019092019150620002ad9050565b5060005b84518110156200044157816001600160a01b031663cf8475da8683815181106200039f57fe5b602002602001015160200151878481518110620003b857fe5b602002602001015160000151888581518110620003d157fe5b60200260200101516040015160016040518563ffffffff1660e01b815260040162000400949392919062000c66565b600060405180830381600087803b1580156200041b57600080fd5b505af115801562000430573d6000803e3d6000fd5b505060019092019150620003799050565b5060005b83518110156200055f5762278d008482815181106200046057fe5b60200260200101516020015111156200048d5760405162461bcd60e51b8152600401620002089062000ce0565b816001600160a01b031663f0845522858381518110620004a957fe5b602002602001015160000151868481518110620004c257fe5b602002602001015160200151620004df30620007e460201b60201c565b6040518463ffffffff1660e01b8152600401620004ff9392919062000c8d565b602060405180830381600087803b1580156200051a57600080fd5b505af11580156200052f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000555919062000b04565b5060010162000445565b5060005b8251811015620006fe5762278d008382815181106200057e57fe5b6020026020010151602001511115620005ab5760405162461bcd60e51b8152600401620002089062000ce0565b816001600160a01b031663f0845522836001600160a01b031663151b89d1868581518110620005d657fe5b6020026020010151600001516040518263ffffffff1660e01b815260040162000600919062000c3e565b60206040518083038186803b1580156200061957600080fd5b505afa1580156200062e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000654919062000b04565b8584815181106200066157fe5b6020026020010151602001516200067e30620007e460201b60201c565b6040518463ffffffff1660e01b81526004016200069e9392919062000c8d565b602060405180830381600087803b158015620006b957600080fd5b505af1158015620006ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006f4919062000b04565b5060010162000563565b506001600160a01b038116632e3ed05b8a6200071a30620007e4565b6040518363ffffffff1660e01b81526004016200073992919062000b81565b602060405180830381600087803b1580156200075457600080fd5b505af115801562000769573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200078f919062000b04565b6000555062000d77975050505050505050565b604080516001808252818301909252606091602080830190803683370190505090508181600081518110620007d357fe5b602002602001018181525050919050565b6040805160018082528183019092526060916020808301908036833701905050905081816000815181106200081557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050919050565b61390e8062001d1883390190565b604080516060810182526000808252602082018190529181019190915290565b8051620008758162000d5e565b92915050565b600082601f8301126200088c578081fd5b8151620008a36200089d8262000d3e565b62000d17565b8181529150602080830190848101604080850287018301881015620008c757600080fd5b6000805b868110156200090d5782848b031215620008e3578182fd5b620008ee8362000d17565b84518152858501518682015286529484019492820192600101620008cb565b5050505050505092915050565b600082601f8301126200092b578081fd5b81516200093c6200089d8262000d3e565b81815291506020808301908481016060808502870183018810156200096057600080fd5b6000805b868110156200090d5782848b0312156200097c578182fd5b620009878362000d17565b620009938b8662000868565b815285850151868201526040620009ad8c82880162000868565b908201528652948401949282019260010162000964565b600080600080600080600080610100898b031215620009e1578384fd5b620009ed8a8a62000868565b9750620009fe8a60208b0162000868565b965062000a0f8a60408b0162000868565b60608a01519096506001600160401b038082111562000a2c578586fd5b62000a3a8c838d016200091a565b965060808b015191508082111562000a50578586fd5b62000a5e8c838d016200091a565b955060a08b015191508082111562000a74578485fd5b62000a828c838d016200091a565b945060c08b015191508082111562000a98578384fd5b62000aa68c838d016200087b565b935060e08b015191508082111562000abc578283fd5b5062000acb8b828c016200087b565b9150509295985092959890939650565b60006020828403121562000aed578081fd5b8151801515811462000afd578182fd5b9392505050565b60006020828403121562000b16578081fd5b5051919050565b60006020828403121562000b2f578081fd5b815162000afd8162000d5e565b6000815180845260208085019450808401835b8381101562000b765781516001600160a01b03168752958201959082019060010162000b4f565b509495945050505050565b6001600160a01b038316815260406020820181905260009062000ba79083018462000b3c565b949350505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b606080825284519082018190526000906020906080840190828801845b8281101562000c0e5781518452928401929084019060010162000bf0565b5050506001600160a01b03861684830152838103604085015262000c33818662000b3c565b979650505050505050565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9384526001600160a01b039283166020850152911660408301521515606082015260800190565b60008482528360208301526060604083015262000cae606083018462000b3c565b95945050505050565b6020808252600f908201526e554e45585045435445445f524f4c4560881b604082015260600190565b60208082526016908201527f554e45585045435445445f4c415247455f44454c415900000000000000000000604082015260600190565b6040518181016001600160401b038111828210171562000d3657600080fd5b604052919050565b60006001600160401b0382111562000d54578081fd5b5060209081020190565b6001600160a01b038116811462000d7457600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c610f2362000df5600039806101a552806102d152806103cb52806104b352806105b9528061069e52806107025280610a365250806108c85280610a9652508061072f5280610aba52508061081d52806109065280610a095280610ade5250610f236000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063a217fddf11610081578063ebf0c7171161005b578063ebf0c71714610146578063fbfa77cf1461014e578063fc78a22814610156576100d4565b8063a217fddf1461012e578063b78b608714610136578063c6bfe9ae1461013e576100d4565b80637217d9d1116100b25780637217d9d11461010957806398f85d5c1461011e578063a0c286d814610126576100d4565b806311f13145146100d95780633c44172d146100e357806362cde1ba146100eb575b600080fd5b6100e161015e565b005b6100e1610476565b6100f361066b565b6040516101009190610d0a565b60405180910390f35b61011161068f565b6040516101009190610d2b565b610111610696565b6100f361069c565b6101116106c0565b6100e16106c5565b6100f3610a94565b6100f3610ab8565b6100f3610adc565b61011161066b565b600054158061025257506040517f6badd2ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636badd2ab906101db90600090600401610d2b565b60006040518083038186803b1580156101f357600080fd5b505afa158015610207573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261024d9190810190610c31565b604001515b610291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028890610e8f565b60405180910390fd5b6000546040517fcc63604a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163cc63604a916103059190600401610d2b565b60206040518083038186803b15801561031d57600080fd5b505afa158015610331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103559190610bbc565b61038b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028890610e58565b6000546040517ffe0d94c100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163fe0d94c1916103ff9190600401610d2b565b600060405180830381600087803b15801561041957600080fd5b505af115801561042d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526104739190810190610bf6565b50565b6040517fcc63604a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063cc63604a906104e990600090600401610d2b565b60206040518083038186803b15801561050157600080fd5b505afa158015610515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105399190610bbc565b61056f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028890610d8d565b60005b600054811015610473576040517ffe0d94c100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063fe0d94c1906105ee908490600401610d2b565b600060405180830381600087803b15801561060857600080fd5b505af115801561061c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106629190810190610bf6565b50600101610572565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b6224ea0081565b60005481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600081565b6040517f557a640300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063557a640390610757907f000000000000000000000000000000000000000000000000000000000000000090600401610d0a565b60206040518083038186803b15801561076f57600080fd5b505afa158015610783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a79190610bbc565b6107dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028890610dea565b6040517f851c1bb300000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063851c1bb390610872907f058a628f0000000000000000000000000000000000000000000000000000000090600401610d60565b60206040518083038186803b15801561088a57600080fd5b505afa15801561089e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c29190610bde565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639be2a88483307f00000000000000000000000000000000000000000000000000000000000000006040518463ffffffff1660e01b815260040161094393929190610d34565b60206040518083038186803b15801561095b57600080fd5b505afa15801561096f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109939190610bbc565b9050806109cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028890610e21565b6040517f058a628f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063058a628f90610a5e907f000000000000000000000000000000000000000000000000000000000000000090600401610d0a565b600060405180830381600087803b158015610a7857600080fd5b505af1158015610a8c573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b80518015158114610b1057600080fd5b92915050565b600082601f830112610b26578081fd5b815167ffffffffffffffff811115610b3c578182fd5b6020610b6e817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601610ec6565b92508183528481838601011115610b8457600080fd5b60005b82811015610ba2578481018201518482018301528101610b87565b82811115610bb35760008284860101525b50505092915050565b600060208284031215610bcd578081fd5b610bd78383610b00565b9392505050565b600060208284031215610bef578081fd5b5051919050565b600060208284031215610c07578081fd5b815167ffffffffffffffff811115610c1d578182fd5b610c2984828501610b16565b949350505050565b600060208284031215610c42578081fd5b815167ffffffffffffffff80821115610c59578283fd5b9083019060c08286031215610c6c578283fd5b610c7660c0610ec6565b825173ffffffffffffffffffffffffffffffffffffffff81168114610c99578485fd5b8152602083015182811115610cac578485fd5b610cb887828601610b16565b602083015250610ccb8660408501610b00565b6040820152610cdd8660608501610b00565b6060820152610cef8660808501610b00565b608082015260a083015160a082015280935050505092915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b60208082526023908201527f43414e4e4f545f545249474745525f44454c4159535f4d4947524154494f4e5f60408201527f5945540000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f524f4f545f4e4f545f434c41494d45445f594554000000000000000000000000604082015260600190565b6020808252601e908201527f4d49475241544f525f43414e4e4f545f5345545f415554484f52495a45520000604082015260600190565b6020808252601e908201527f43414e4e4f545f545249474745525f524f4f545f4348414e47455f5945540000604082015260600190565b60208082526017908201527f44454c4159535f4e4f545f4d494752415445445f594554000000000000000000604082015260600190565b60405181810167ffffffffffffffff81118282101715610ee557600080fd5b60405291905056fea2646970667358221220b446cc8050b42b9666cd8bda65a6f5b9e6bdbd36e7cac1f72a77ba1fa5bf93e764736f6c634300070100336101e06040523480156200001257600080fd5b506040516200390e3803806200390e8339810160408190526200003591620003df565b6001600055620000458362000265565b816001600160a01b0316638d928af86040518163ffffffff1660e01b815260040160206040518083038186803b1580156200007f57600080fd5b505afa15801562000094573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ba919062000426565b6001600160a01b0316610160816001600160a01b031660601b81525050816001600160a01b031663e758d36b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200011157600080fd5b505afa15801562000126573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014c919062000426565b6001600160601b0319606091821b81166101a0529083901b16610180526040516200017790620003d1565b604051809103906000f08015801562000194573d6000803e3d6000fd5b5060601b6001600160601b031916610140526101c08190526000620001c06337c5e2cb60e11b620002af565b90506000620001d6634c07348160e01b620002af565b90506000620001e883600019620002e4565b90506000620001fa83600019620002e4565b90506200020b828860001962000319565b6200021a818860001962000319565b608084905260a08390526200023663fe0d94c160e01b620002af565b60c0526200024b6378422a9160e11b620002af565b60e052610100919091526101205250620004b19350505050565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f39510b933a9d010f906528d6019d3f4e2450a10dc33b10887503b31ed82f111190600090a250565b604051600090620002c7903090849060200162000480565b604051602081830303815290604052805190602001209050919050565b60008282604051602001620002fb92919062000472565b60405160208183030381529060405280519060200120905092915050565b60006200032884848462000399565b60008181526004602052604090205490915060ff166200039357600081815260046020526040808220805460ff19166001179055516001600160a01b03808516929086169187917fef6ee312a0062a24a46be2eba5284183a87ff848110e8d4df979bd690d9e9f6891a45b50505050565b6000838383604051602001620003b2939291906200044c565b6040516020818303038152906040528051906020012090509392505050565b6104ef806200341f83390190565b600080600060608486031215620003f4578283fd5b8351620004018162000498565b6020850151909350620004148162000498565b80925050604084015190509250925092565b60006020828403121562000438578081fd5b8151620004458162000498565b9392505050565b9283526001600160601b0319606092831b81166020850152911b16603482015260480190565b918252602082015260400190565b9182526001600160e01b031916602082015260240190565b6001600160a01b0381168114620004ae57600080fd5b50565b60805160a05160c05160e05161010051610120516101405160601c6101605160601c6101805160601c6101a05160601c6101c051612e916200058e6000398061145b52508061132d5250806113555250806112f152806117ed5250806107ff5280610946528061102252806113ce52806117845280611a9f52806121895250806106f1528061074b5250806106c4528061071e52508061066f52806115835250806109b352806115575250806110d05280611614528061163d52806119295250806107915280611160528061143252806115af5250612e916000f3fe608060405234801561001057600080fd5b50600436106103155760003560e01c80637e1c556d116101a7578063d00bef4d116100ee578063e8104ea011610097578063f1521d7611610071578063f1521d761461060e578063fc78a22814610621578063fe0d94c11461062957610315565b8063e8104ea0146105d5578063f0845522146105e8578063f0bb9406146105fb57610315565b8063df6b0d01116100c8578063df6b0d01146105a7578063e2b4146b146105ba578063e5e6e8ae146105cd57610315565b8063d00bef4d14610579578063d754bad914610581578063d7ad1dcf1461059457610315565b80639be2a88411610150578063c284b6b91161012a578063c284b6b91461054b578063cc63604a14610553578063cf8475da1461056657610315565b80639be2a8841461051d5780639f81aed714610530578063b3eb281d1461053857610315565b8063863bac6b11610181578063863bac6b146104ef57806386ff254b146105025780638d928af81461051557610315565b80637e1c556d146104c157806382938ca8146104c9578063851c1bb3146104dc57610315565b80634125ff901161026b57806362cde1ba116102145780636f8bc596116101ee5780636f8bc59614610488578063715716a21461049b57806378a08377146104ae57610315565b806362cde1ba146104585780636badd2ab146104605780636c1032af1461048057610315565b806355ed08a11161024557806355ed08a11461041d5780635b78b780146104305780635ca1e1651461044357610315565b80634125ff90146103ef5780634c073481146103f7578063557a64031461040a57610315565b80631b3c85eb116102cd5780632e3ed05b116102a75780632e3ed05b146103b65780633bf46797146103c957806340e58ee5146103dc57610315565b80631b3c85eb146103885780632362716d1461039b5780632debdd2e146103ae57610315565b806314ea35e7116102fe57806314ea35e714610358578063151b89d114610362578063169f14681461037557610315565b80630df322a61461031a57806310697a3a14610343575b600080fd5b61032d6103283660046124b0565b610649565b60405161033a9190612ac0565b60405180910390f35b61034b61066d565b60405161033a9190612acb565b610360610691565b005b61034b610370366004612678565b61078a565b61034b610383366004612518565b6107bc565b6103606103963660046124b0565b61092b565b61034b6103a93660046126a8565b61097b565b61034b6109b1565b61034b6103c43660046124cb565b6109d5565b61034b6103d7366004612678565b610aa9565b6103606103ea366004612678565b610abb565b61034b610d11565b6103606104053660046125c6565b610d19565b61032d6104183660046124b0565b610da4565b61034b61042b3660046127a1565b610dc5565b61034b61043e3660046126e5565b610df8565b61044b610ed7565b60405161033a9190612958565b61044b610ef3565b61047361046e366004612678565b610ef9565b60405161033a9190612d29565b61044b611020565b6103606104963660046125c6565b611044565b61032d6104a93660046126a8565b6110c9565b6103606104bc36600461274d565b6110f7565b61034b61115e565b6103606104d7366004612621565b611182565b61034b6104ea366004612806565b6111cb565b61034b6104fd3660046126e5565b6111fe565b61032d6105103660046126a8565b6112c2565b61044b6112ef565b61032d61052b3660046126a8565b611313565b61034b611424565b61032d6105463660046126a8565b61142b565b61034b611459565b61032d610561366004612678565b61147d565b61036061057436600461274d565b6114f6565b61044b611534565b61034b61058f366004612678565b611550565b61034b6105a2366004612678565b61157c565b61032d6105b53660046126a8565b6115a8565b61032d6105c83660046126a8565b6115d6565b61034b611612565b61034b6105e3366004612678565b611636565b61034b6105f63660046127c2565b611662565b6103606106093660046127a1565b611769565b61032d61061c3660046126a8565b611922565b61034b610ef3565b61063c610637366004612678565b611950565b60405161033a9190612b01565b60025473ffffffffffffffffffffffffffffffffffffffff8281169116145b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60015460025473ffffffffffffffffffffffffffffffffffffffff91821691166106bf338214610191611b67565b6106ec7f000000000000000000000000000000000000000000000000000000000000000082600019611b75565b6107197f000000000000000000000000000000000000000000000000000000000000000082600019611b75565b6107467f000000000000000000000000000000000000000000000000000000000000000083600019611bfe565b6107737f000000000000000000000000000000000000000000000000000000000000000083600019611bfe565b61077c81611c85565b6107866000611cf4565b5050565b60006107b67f000000000000000000000000000000000000000000000000000000000000000083610dc5565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff84163014156107fd5760405162461bcd60e51b81526004016107f490612b14565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156108695760405162461bcd60e51b81526004016107f490612b71565b60008473ffffffffffffffffffffffffffffffffffffffff1663851c1bb361089086611d63565b6040518263ffffffff1660e01b81526004016108ac9190612ad4565b60206040518083038186803b1580156108c457600080fd5b505afa1580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190612690565b905061091461090c8233886115d6565b610191611b67565b61092081868686611e6f565b9150505b9392505050565b61096f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610191611b67565b61097881611cf4565b50565b6000838383604051602001610992939291906128dc565b6040516020818303038152906040528051906020012090509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006109e361090c33610da4565b6000610a0e7f1b3c85eb000000000000000000000000000000000000000000000000000000006111cb565b90506060631b3c85eb60e01b85604051602401610a2b9190612958565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050610aa0823083610a9a611459565b88611eb2565b95945050505050565b60009081526005602052604090205490565b6003548110610adc5760405162461bcd60e51b81526004016107f490612cbb565b600060038281548110610aeb57fe5b60009182526020909120600490910201600281015490915060ff1615610b235760405162461bcd60e51b81526004016107f490612cf2565b6002810154610100900460ff1615610b4d5760405162461bcd60e51b81526004016107f490612c84565b805460018083018054604080516020600261010096851615969096026000190190931694909404601f810183900483028501830190915280845273ffffffffffffffffffffffffffffffffffffffff90941693600093859363851c1bb393610c0b9390830182828015610c015780601f10610bd657610100808354040283529160200191610c01565b820191906000526020600020905b815481529060010190602001808311610be457829003601f168201915b5050505050611d63565b6040518263ffffffff1660e01b8152600401610c279190612ad4565b60206040518083038186803b158015610c3f57600080fd5b505afa158015610c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c779190612690565b8354909150610cb290610ca3908390339073ffffffffffffffffffffffffffffffffffffffff166115d6565b8061090c575061090c33610da4565b6002830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560405184907f2a6bef66de603fc0ec07223576486bd905cd9bb6e05364286d9a5cd1be046ae690600090a250505050565b6303c2670081565b610d25835182516120a6565b60005b8351811015610d9e57610d6561090c858381518110610d4357fe5b602002602001015133858581518110610d5857fe5b60200260200101516110c9565b610d96848281518110610d7457fe5b602002602001015184848481518110610d8957fe5b6020026020010151611bfe565b600101610d28565b50505050565b60015473ffffffffffffffffffffffffffffffffffffffff90811691161490565b60008282604051602001610dda92919061291a565b60405160208183030381529060405280519060200120905092915050565b6000610e0861090c863386611922565b60607f4c07348100000000000000000000000000000000000000000000000000000000610e34876120b3565b86610e3e876120f4565b604051602401610e5093929190612a21565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506000610ebc87611636565b9050610eca81308487611e6f565b925050505b949350505050565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b60001981565b610f016122ef565b60038281548110610f0e57fe5b60009182526020918290206040805160c0810182526004909302909101805473ffffffffffffffffffffffffffffffffffffffff168352600180820180548451601f60026000199584161561010002959095019092169390930490810187900487028301870190945283825293949193858301939192909190830182828015610fd85780601f10610fad57610100808354040283529160200191610fd8565b820191906000526020600020905b815481529060010190602001808311610fbb57829003601f168201915b5050509183525050600282015460ff80821615156020840152610100820481161515604084015262010000909104161515606082015260039091015460809091015292915050565b7f000000000000000000000000000000000000000000000000000000000000000090565b611050835182516120a6565b60005b8351811015610d9e5761109061090c85838151811061106e57fe5b60200260200101513385858151811061108357fe5b60200260200101516115a8565b6110c184828151811061109f57fe5b6020026020010151848484815181106110b457fe5b6020026020010151611b75565b600101611053565b6000610ecf7f0000000000000000000000000000000000000000000000000000000000000000848487612163565b600061110233610da4565b8061111c57508115801561111c575061111c85338561142b565b905061112a81610191611b67565b60006111358661078a565b90506111568186868661114a57611bfe61114e565b611b755b63ffffffff16565b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61118e825182516120a6565b60005b82518110156111c6576111be8382815181106111a957fe5b602002602001015133848481518110610d8957fe5b600101611191565b505050565b6040516000906111e19030908490602001612928565b604051602081830303815290604052805190602001209050919050565b600061120e61090c86338661142b565b60607f6f8bc5960000000000000000000000000000000000000000000000000000000061123a876120b3565b86611244876120f4565b60405160240161125693929190612a21565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506000610ebc8761078a565b6000600460006112d386868661097b565b815260208101919091526040016000205460ff16949350505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156113a9577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16149050610924565b6000848152600560205260409020546113cc576113c78484846115d6565b610ecf565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161490509392505050565b6206978081565b6000610ecf7f0000000000000000000000000000000000000000000000000000000000000000848487612213565b7f000000000000000000000000000000000000000000000000000000000000000090565b60035460009082106114a15760405162461bcd60e51b81526004016107f490612cbb565b6000600383815481106114b057fe5b60009182526020909120600490910201600281015490915060ff161580156114e257506002810154610100900460ff16155b801561092457506003015442101592915050565b600061150133610da4565b8061151b57508115801561151b575061151b853385611922565b905061152981610191611b67565b600061113586611636565b60025473ffffffffffffffffffffffffffffffffffffffff1690565b60006107b67f000000000000000000000000000000000000000000000000000000000000000083610dc5565b60006107b67f000000000000000000000000000000000000000000000000000000000000000083610dc5565b6000610ecf7f0000000000000000000000000000000000000000000000000000000000000000848487612163565b6000600460006115e786868661097b565b815260208101919091526040016000205460ff1680610ecf5750600460006112d3868660001961097b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006107b67f000000000000000000000000000000000000000000000000000000000000000083610dc5565b60006303c267008311156116885760405162461bcd60e51b81526004016107f490612c16565b61169461090c33610da4565b600084815260056020526040812054908185106116b457620697806116c3565b6116c38583036206978061224e565b905060006116d08761157c565b9050606063f0bb940660e01b88886040516024016116ef92919061291a565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905061175d823083868a611eb2565b98975050505050505050565b6117ad3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610191611b67565b6040517f851c1bb300000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063851c1bb390611842907f058a628f0000000000000000000000000000000000000000000000000000000090600401612ad4565b60206040518083038186803b15801561185a57600080fd5b505afa15801561186e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118929190612690565b90506000818414806118b257506000828152600560205260409020548311155b9050806118d15760405162461bcd60e51b81526004016107f490612ba8565b600084815260056020526040908190208490555184907f0e182617f9e5f9ce5f761c791ec15ad52176d97f9706b5c2707ffda7b6bdf79090611914908690612acb565b60405180910390a250505050565b6000610ecf7f0000000000000000000000000000000000000000000000000000000000000000848487612213565b606061195a61225a565b600354821061197b5760405162461bcd60e51b81526004016107f490612cbb565b60006003838154811061198a57fe5b60009182526020909120600490910201600281015490915060ff16156119c25760405162461bcd60e51b81526004016107f490612cf2565b6002810154610100900460ff16156119ec5760405162461bcd60e51b81526004016107f490612c84565b8060030154421015611a105760405162461bcd60e51b81526004016107f490612bdf565b600281015462010000900460ff1615611a4e576000611a2e84611550565b90506000611a3d8233306115d6565b9050611a4b81610191611b67565b50505b60028101805460ff1916600190811790915581546040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811693631cff79cd93611ada9392169190860190600401612979565b600060405180830381600087803b158015611af457600080fd5b505af1158015611b08573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b309190810190612846565b60405190925083907f4fa5548c15e2d4a0b806eee962935acea143d79644d2340af39f4edf13b335a990600090a250610668612273565b81610786576107868161227a565b6000611b8284848461097b565b60008181526004602052604090205490915060ff16610d9e57600081815260046020526040808220805460ff191660011790555173ffffffffffffffffffffffffffffffffffffffff808516929086169187917fef6ee312a0062a24a46be2eba5284183a87ff848110e8d4df979bd690d9e9f6891a450505050565b6000611c0b84848461097b565b60008181526004602052604090205490915060ff1615610d9e57600081815260046020526040808220805460ff191690555173ffffffffffffffffffffffffffffffffffffffff808516929086169187917f7b42e026d3b17cf41399915c285780d0f724b3464b269297aff73c0de0fe417f91a450505050565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f39510b933a9d010f906528d6019d3f4e2450a10dc33b10887503b31ed82f111190600090a250565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f566fe119ff450afc2580186c62762b6c1258245c8b1b6bb095e7276eb5a75b5590600090a250565b6000600482511015611d7757506000610668565b601882600381518110611d8657fe5b016020015183517fff0000000000000000000000000000000000000000000000000000000000000090911690911c9060109084906002908110611dc557fe5b016020015184517fff0000000000000000000000000000000000000000000000000000000000000090911690911c9060089085906001908110611e0457fe5b016020015185517fff0000000000000000000000000000000000000000000000000000000000000090911690911c908590600090611e3e57fe5b01602001517fff00000000000000000000000000000000000000000000000000000000000000161717179050919050565b60008481526005602052604081205480611e9b5760405162461bcd60e51b81526004016107f490612c4d565b611ea88686868487611eb2565b9695505050505050565b600354604051819087907f26ce5ffb7ab1ce72d9ca4a3e4f906d2b99194d6c53dd9832fd7a59d0b2fc6bed90600090a381516040805160c08101825273ffffffffffffffffffffffffffffffffffffffff888116825260208083018981526000948401859052606084018590529415156080840181905242890160a0850181905260038054600181018255965284517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b600490970296870180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909516178455955180519195611fcc937fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c90910192910190612325565b50604082015160028201805460608501516080860151151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff95151560ff199094169390931794909416919091171691909117905560a090910151600390910155600061206584611550565b905060005b8551811015612099576120918287838151811061208357fe5b602002602001015130611b75565b60010161206a565b5050505095945050505050565b6107868183146067611b67565b6040805160018082528183019092526060916020808301908036833701905050905081816000815181106120e357fe5b602002602001018181525050919050565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061212457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050919050565b6000806121708684610dc5565b600081815260056020526040902054909150156121de577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614915050610ecf565b6121e98186866115d6565b156121f8576001915050610ecf565b600061220687600019610dc5565b9050610eca818787611313565b6000806122208684610dc5565b9050600061223087600019610dc5565b905061223d8287876115d6565b80610eca5750610eca8187876115d6565b80820390821002900390565b61226c60026000541415610190611b67565b6002600055565b6001600055565b62461bcd60e51b600090815260206004526007602452600a808304818106603090810160081b83860601918390049283060160101b016642414c230000300160c81b604452610978917f42414c0000000000000000000000000000000000000000000000000000000000906242414c90606490fd5b6040805160c08101825260008082526060602083018190529282018190529181018290526080810182905260a081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061236657805160ff1916838001178555612393565b82800160010185558215612393579182015b82811115612393578251825591602001919060010190612378565b5061239f9291506123a3565b5090565b5b8082111561239f57600081556001016123a4565b803573ffffffffffffffffffffffffffffffffffffffff811681146107b657600080fd5b600082601f8301126123ec578081fd5b81356123ff6123fa82612dc6565b612d9f565b81815291506020808301908481018184028601820187101561242057600080fd5b60005b848110156124475761243588836123b8565b84529282019290820190600101612423565b505050505092915050565b600082601f830112612462578081fd5b81356124706123fa82612dc6565b81815291506020808301908481018184028601820187101561249157600080fd5b60005b8481101561244757813584529282019290820190600101612494565b6000602082840312156124c1578081fd5b61092483836123b8565b600080604083850312156124dd578081fd5b6124e784846123b8565b9150602083013567ffffffffffffffff811115612502578182fd5b61250e858286016123dc565b9150509250929050565b60008060006060848603121561252c578081fd5b61253685856123b8565b9250602084013567ffffffffffffffff80821115612552578283fd5b818601915086601f830112612565578283fd5b81356125736123fa82612de6565b818152886020838601011115612587578485fd5b81602085016020830137908101602001849052935060408601359150808211156125af578283fd5b506125bc868287016123dc565b9150509250925092565b6000806000606084860312156125da578283fd5b833567ffffffffffffffff808211156125f1578485fd5b6125fd87838801612452565b945061260c87602088016123b8565b935060408601359150808211156125af578283fd5b60008060408385031215612633578182fd5b823567ffffffffffffffff8082111561264a578384fd5b61265686838701612452565b9350602085013591508082111561266b578283fd5b5061250e858286016123dc565b600060208284031215612689578081fd5b5035919050565b6000602082840312156126a1578081fd5b5051919050565b6000806000606084860312156126bc578283fd5b833592506126cd85602086016123b8565b91506126dc85604086016123b8565b90509250925092565b600080600080608085870312156126fa578081fd5b8435935061270b86602087016123b8565b925061271a86604087016123b8565b9150606085013567ffffffffffffffff811115612735578182fd5b612741878288016123dc565b91505092959194509250565b60008060008060808587031215612762578384fd5b8435935061277386602087016123b8565b925061278286604087016123b8565b915060608501358015158114612796578182fd5b939692955090935050565b600080604083850312156127b3578182fd5b50508035926020909101359150565b6000806000606084860312156127d6578081fd5b8335925060208401359150604084013567ffffffffffffffff8111156127fa578182fd5b6125bc868287016123dc565b600060208284031215612817578081fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610924578182fd5b600060208284031215612857578081fd5b815167ffffffffffffffff81111561286d578182fd5b8201601f8101841361287d578182fd5b805161288b6123fa82612de6565b81815285602083850101111561289f578384fd5b610aa0826020830160208601612e2f565b600081518084526128c8816020860160208601612e2f565b601f01601f19169290920160200192915050565b9283527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606092831b81166020850152911b16603482015260480190565b918252602082015260400190565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b60006040820173ffffffffffffffffffffffffffffffffffffffff8516835260206040818501528285546001808216600081146129bd57600181146129db57612a13565b607f6002840416865260ff1983166060890152608088019350612a13565b600283048087526129eb8a612e0a565b885b82811015612a095781548b8201606001529084019087016129ed565b8a01606001955050505b509198975050505050505050565b606080825284519082018190526000906020906080840190828801845b82811015612a5a57815184529284019290840190600101612a3e565b50505073ffffffffffffffffffffffffffffffffffffffff8616848301528381036040850152845180825285830191830190845b81811015612ab257612aa08451612e16565b83529284019291840191600101612a8e565b509098975050505050505050565b901515815260200190565b90815260200190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b60006020825261092460208301846128b0565b60208082526022908201527f43414e4e4f545f5343484544554c455f415554484f52495a45525f414354494f60408201527f4e53000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601e908201527f415454454d5054494e475f4558454355544f525f5245454e5452414e43590000604082015260600190565b6020808252601c908201527f44454c41595f455843454544535f5345545f415554484f52495a455200000000604082015260600190565b60208082526015908201527f414354494f4e5f4e4f545f45584543555441424c450000000000000000000000604082015260600190565b6020808252600f908201527f44454c41595f544f4f5f4c415247450000000000000000000000000000000000604082015260600190565b60208082526016908201527f43414e4e4f545f5343484544554c455f414354494f4e00000000000000000000604082015260600190565b60208082526018908201527f414354494f4e5f414c52454144595f43414e43454c4c45440000000000000000604082015260600190565b60208082526015908201527f414354494f4e5f444f45535f4e4f545f45584953540000000000000000000000604082015260600190565b60208082526017908201527f414354494f4e5f414c52454144595f4558454355544544000000000000000000604082015260600190565b60006020825273ffffffffffffffffffffffffffffffffffffffff8351166020830152602083015160c06040840152612d6560e08401826128b0565b90506040840151151560608401526060840151151560808401526080840151151560a084015260a084015160c08401528091505092915050565b60405181810167ffffffffffffffff81118282101715612dbe57600080fd5b604052919050565b600067ffffffffffffffff821115612ddc578081fd5b5060209081020190565b600067ffffffffffffffff821115612dfc578081fd5b50601f01601f191660200190565b60009081526020902090565b73ffffffffffffffffffffffffffffffffffffffff1690565b60005b83811015612e4a578181015183820152602001612e32565b83811115610d9e575050600091015256fea26469706673582212208733c30c130550b060faaef187150faeaeec2b84638906a342649c6d8f3865f964736f6c6343000701003360a060405234801561001057600080fd5b5060016000553360601b60805260805160601c6104b061003f600039806101c6528061026e52506104b06000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80631cff79cd1461003b578063d09edf3114610173575b600080fd5b6100fe6004803603604081101561005157600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516919081019060408101602082013564010000000081111561008957600080fd5b82018360208201111561009b57600080fd5b803590602001918460018302840111640100000000831117156100bd57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506101a4945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610138578181015183820152602001610120565b50505050905090810190601f1680156101655780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017b61026c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b60606101ae610290565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461025257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552525f53454e4445525f4e4f545f415554484f52495a455200000000000000604482015290519081900360640190fd5b61025c83836102a9565b9050610266610393565b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6102a26002600054141561019061039a565b6002600055565b6060600060608473ffffffffffffffffffffffffffffffffffffffff16846040518082805190602001908083835b6020831061031457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102d7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610376576040519150601f19603f3d011682016040523d82523d6000602084013e61037b565b606091505b509150915061038a82826103ac565b95945050505050565b6001600055565b816103a8576103a8816103d2565b5050565b606082156103bb575080610266565b8151156103cb5781518083602001fd5b6102666101ae5b6103fc817f42414c00000000000000000000000000000000000000000000000000000000006103ff565b50565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fdfea26469706673582212202cab8bc2362052d26d734d8e96bf55d57652f71d5c18bad7251afeae8157d17b64736f6c63430007010033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100d45760003560e01c8063a217fddf11610081578063ebf0c7171161005b578063ebf0c71714610146578063fbfa77cf1461014e578063fc78a22814610156576100d4565b8063a217fddf1461012e578063b78b608714610136578063c6bfe9ae1461013e576100d4565b80637217d9d1116100b25780637217d9d11461010957806398f85d5c1461011e578063a0c286d814610126576100d4565b806311f13145146100d95780633c44172d146100e357806362cde1ba146100eb575b600080fd5b6100e161015e565b005b6100e1610476565b6100f361066b565b6040516101009190610d0a565b60405180910390f35b61011161068f565b6040516101009190610d2b565b610111610696565b6100f361069c565b6101116106c0565b6100e16106c5565b6100f3610a94565b6100f3610ab8565b6100f3610adc565b61011161066b565b600054158061025257506040517f6badd2ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636badd2ab906101db90600090600401610d2b565b60006040518083038186803b1580156101f357600080fd5b505afa158015610207573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261024d9190810190610c31565b604001515b610291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028890610e8f565b60405180910390fd5b6000546040517fcc63604a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163cc63604a916103059190600401610d2b565b60206040518083038186803b15801561031d57600080fd5b505afa158015610331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103559190610bbc565b61038b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028890610e58565b6000546040517ffe0d94c100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163fe0d94c1916103ff9190600401610d2b565b600060405180830381600087803b15801561041957600080fd5b505af115801561042d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526104739190810190610bf6565b50565b6040517fcc63604a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063cc63604a906104e990600090600401610d2b565b60206040518083038186803b15801561050157600080fd5b505afa158015610515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105399190610bbc565b61056f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028890610d8d565b60005b600054811015610473576040517ffe0d94c100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063fe0d94c1906105ee908490600401610d2b565b600060405180830381600087803b15801561060857600080fd5b505af115801561061c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106629190810190610bf6565b50600101610572565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b6224ea0081565b60005481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600081565b6040517f557a640300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063557a640390610757907f000000000000000000000000000000000000000000000000000000000000000090600401610d0a565b60206040518083038186803b15801561076f57600080fd5b505afa158015610783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a79190610bbc565b6107dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028890610dea565b6040517f851c1bb300000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063851c1bb390610872907f058a628f0000000000000000000000000000000000000000000000000000000090600401610d60565b60206040518083038186803b15801561088a57600080fd5b505afa15801561089e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c29190610bde565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639be2a88483307f00000000000000000000000000000000000000000000000000000000000000006040518463ffffffff1660e01b815260040161094393929190610d34565b60206040518083038186803b15801561095b57600080fd5b505afa15801561096f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109939190610bbc565b9050806109cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028890610e21565b6040517f058a628f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063058a628f90610a5e907f000000000000000000000000000000000000000000000000000000000000000090600401610d0a565b600060405180830381600087803b158015610a7857600080fd5b505af1158015610a8c573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b80518015158114610b1057600080fd5b92915050565b600082601f830112610b26578081fd5b815167ffffffffffffffff811115610b3c578182fd5b6020610b6e817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601610ec6565b92508183528481838601011115610b8457600080fd5b60005b82811015610ba2578481018201518482018301528101610b87565b82811115610bb35760008284860101525b50505092915050565b600060208284031215610bcd578081fd5b610bd78383610b00565b9392505050565b600060208284031215610bef578081fd5b5051919050565b600060208284031215610c07578081fd5b815167ffffffffffffffff811115610c1d578182fd5b610c2984828501610b16565b949350505050565b600060208284031215610c42578081fd5b815167ffffffffffffffff80821115610c59578283fd5b9083019060c08286031215610c6c578283fd5b610c7660c0610ec6565b825173ffffffffffffffffffffffffffffffffffffffff81168114610c99578485fd5b8152602083015182811115610cac578485fd5b610cb887828601610b16565b602083015250610ccb8660408501610b00565b6040820152610cdd8660608501610b00565b6060820152610cef8660808501610b00565b608082015260a083015160a082015280935050505092915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b60208082526023908201527f43414e4e4f545f545249474745525f44454c4159535f4d4947524154494f4e5f60408201527f5945540000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f524f4f545f4e4f545f434c41494d45445f594554000000000000000000000000604082015260600190565b6020808252601e908201527f4d49475241544f525f43414e4e4f545f5345545f415554484f52495a45520000604082015260600190565b6020808252601e908201527f43414e4e4f545f545249474745525f524f4f545f4348414e47455f5945540000604082015260600190565b60208082526017908201527f44454c4159535f4e4f545f4d494752415445445f594554000000000000000000604082015260600190565b60405181810167ffffffffffffffff81118282101715610ee557600080fd5b60405291905056fea2646970667358221220b446cc8050b42b9666cd8bda65a6f5b9e6bdbd36e7cac1f72a77ba1fa5bf93e764736f6c63430007010033",
"linkReferences": {},
"deployedLinkReferences": {}
}