0x608060405234801561001057600080fd5b506004361061021c5760003560e01c806367e4ac2c11610125578063a9059cbb116100ad578063c70920bc1161007c578063c70920bc146105d8578063d2135273146105f2578063d505accf14610605578063d798f86e14610618578063dd62ed3e1461064057600080fd5b8063a9059cbb14610562578063af247da314610575578063b751a0471461059c578063c45a0155146105b157600080fd5b806384b0196e116100f457806384b0196e146104de57806391e7c015146104f957806395d89b4114610520578063a0171ef514610528578063a457c2d71461054f57600080fd5b806367e4ac2c1461041d5780636f307dc31461047b57806370a08231146104a25780637ecebe00146104cb57600080fd5b806335ec597f116101a85780634157bc21116101775780634157bc211461038457806343bf8ab31461039757806346904840146103a05780634b5992df146103df57806362c0e33a146103f257600080fd5b806335ec597f146103435780633644e51514610356578063395093511461035e5780633a19e2301461037157600080fd5b8063204f83f9116101ef578063204f83f91461027e5780632390154f146102a557806323b872dd146102b85780632778c334146102cb578063313ce5671461033457600080fd5b806306fdde0314610221578063095ea7b31461023f57806318160ddd146102625780631dd19cb414610274575b600080fd5b610229610679565b6040516102369190614a17565b60405180910390f35b61025261024d366004614a3f565b61070b565b6040519015158152602001610236565b6003545b604051908152602001610236565b61027c610725565b005b6102667f000000000000000000000000000000000000000000000000000000006772435581565b6102666102b3366004614a6b565b610877565b6102526102c6366004614a9b565b610a76565b6102d3610a9a565b6040516102369190600061010082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015292915050565b60405160128152602001610236565b610266610351366004614adc565b610aef565b61026661101a565b61025261036c366004614a3f565b611024565b61026661037f366004614a6b565b611063565b610266610392366004614adc565b611232565b610266600b5481565b6103c77f0000000000000000000000006e2e673a0b1d334c9caa0e2d50a10dab3736bd9d81565b6040516001600160a01b039091168152602001610236565b6102666103ed366004614b88565b61173f565b600c54610405906001600160801b031681565b6040516001600160801b039091168152602001610236565b604080516001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2811682527f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde16602082015201610236565b6103c77f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6102666104b0366004614c5f565b6001600160a01b031660009081526001602052604090205490565b6102666104d9366004614c5f565b611a35565b6104e6611a53565b6040516102369796959493929190614c7c565b6102667f0000000000000000000000000000000000000000000000000e3872be3bd5ae0081565b610229611adc565b6103c77f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde81565b61025261055d366004614a3f565b611aeb565b610252610570366004614a3f565b611b82565b6102667f000000000000000000000000000000000000000000000004d2c3d7905734ee0081565b6105a4611b90565b6040516102369190614d12565b6103c77f00000000000000000000000017354e8e7518599c7f6b7095a6706766e4e4dc6181565b600c5461040590600160801b90046001600160801b031681565b61027c610600366004614d4c565b611c24565b61027c610613366004614d6e565b611dc0565b61062b610626366004614c5f565b611f24565b60408051928352602083019190915201610236565b61026661064e366004614de5565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b60606004805461068890614e13565b80601f01602080910402602001604051908101604052809291908181526020018280546106b490614e13565b80156107015780601f106106d657610100808354040283529160200191610701565b820191906000526020600020905b8154815290600101906020018083116106e457829003601f168201915b5050505050905090565b6000336107198185856120b5565b60019150505b92915050565b61072d6121d9565b600c546001600160801b03600160801b82048116911660008161076f7f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde612232565b6107799190614e5d565b90506000836107a77f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2612232565b6107b19190614e5d565b9050811561080d5761080d6001600160a01b037f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde167f0000000000000000000000006e2e673a0b1d334c9caa0e2d50a10dab3736bd9d846122fa565b8015610867576108676001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2167f0000000000000000000000006e2e673a0b1d334c9caa0e2d50a10dab3736bd9d836122fa565b505050506108756001600055565b565b60006108816121d9565b427f0000000000000000000000000000000000000000000000000000000067724355116108c15760405163398b36db60e01b815260040160405180910390fd5b60006108cb61237a565b9050600080806108db8488612560565b91945092509050600061090e847f00000000000000000000000000000000000000000000000000000000000000126125c5565b9050600061093c847f00000000000000000000000000000000000000000000000000000000000000126125c5565b9050600061096a847f00000000000000000000000000000000000000000000000000000000000000126125c5565b90508260000361098d576040516354353b2760e01b815260040160405180910390fd5b610996876125ee565b6109cb6001600160a01b037f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde1633308d6126e4565b6109ff6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2168a856122fa565b6001600160a01b038916337f66d431b54da747831a1f20909a91a78bf991722fb6095c413fbf0918116dae15610a3486612722565b610a3d8e6127a9565b60408051928352602083019190915281018690526060810185905260800160405180910390a350909550505050505061071f6001600055565b600033610a848582856127c0565b610a8f85858561284c565b506001949350505050565b610ae260405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b610aea61237a565b905090565b6000610af96121d9565b427f000000000000000000000000000000000000000000000000000000006772435511610b395760405163398b36db60e01b815260040160405180910390fd5b610b416149a9565b600080600080610b4f61237a565b905089858c60038110610b6457610b64614e70565b6020020152604051633883e11960e01b81526001600160a01b037f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde1690633883e11990610bb8908890600190600401614ea9565b602060405180830381865afa158015610bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf99190614ec6565b935060008080610c098488612560565b91945092509050610c3a837f00000000000000000000000000000000000000000000000000000000000000126125c5565b9850610c66827f00000000000000000000000000000000000000000000000000000000000000126125c5565b9550610c92817f00000000000000000000000000000000000000000000000000000000000000126125c5565b945088600003610cb5576040516354353b2760e01b815260040160405180910390fd5b610cbe846125ee565b505050506000610ced7f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde612232565b90506000610d1a7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2612232565b9050610d506001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2168b896122fa565b60405163b27459ef60e01b81523360048201527f00000000000000000000000017354e8e7518599c7f6b7095a6706766e4e4dc616001600160a01b03169063b27459ef90602401602060405180830381865afa158015610db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd89190614edf565b610df4576040516237368760e61b815260040160405180910390fd5b3363fa483e72610e0389612722565b610e0c8e6127a9565b8c8c6040518563ffffffff1660e01b8152600401610e2d9493929190614f01565b600060405180830381600087803b158015610e4757600080fd5b505af1158015610e5b573d6000803e3d6000fd5b5050604051634515cef360e01b81526001600160a01b037f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde169250634515cef39150610eae908990600090600401614f3e565b6020604051808303816000875af1158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190614ec6565b50610efc8583614f59565b610f257f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde612232565b1015610f445760405163bf753d0160e01b815260040160405180910390fd5b610f4e8782614e5d565b610f777f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2612232565b1015610f9657604051630dbfca4560e11b815260040160405180910390fd5b50506001600160a01b038816337ff54b934b77620daa031e904076c3128079bcb07ca7a81f4235c504dc9c82eab4610fcd88612722565b8d610fd78e6127a9565b60408051938452602084019290925290820152606081018690526080810185905260a00160405180910390a3505050506110116001600055565b95945050505050565b6000610aea6129f7565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909190610719908290869061105e908790614f59565b6120b5565b600061106d6121d9565b427f0000000000000000000000000000000000000000000000000000000067724355116110ad5760405163398b36db60e01b815260040160405180910390fd5b60006110b761237a565b9050600080806110c78488612b22565b9194509250905060006110fa847f00000000000000000000000000000000000000000000000000000000000000126125c5565b90506000611128847f00000000000000000000000000000000000000000000000000000000000000126125c5565b90506000611156847f00000000000000000000000000000000000000000000000000000000000000126125c5565b90508260000361117957604051634f3f1ff560e11b815260040160405180910390fd5b611182876125ee565b6111b76001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2163330866126e4565b6111eb6001600160a01b037f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde168a8c6122fa565b6001600160a01b038916337f66d431b54da747831a1f20909a91a78bf991722fb6095c413fbf0918116dae1561122086612722565b61122990614f6c565b610a3d8e612722565b600061123c6121d9565b427f00000000000000000000000000000000000000000000000000000000677243551161127c5760405163398b36db60e01b815260040160405180910390fd5b60008060008061128a61237a565b90506112946149a9565b89818c600381106112a7576112a7614e70565b6020020152604051633883e11960e01b81526001600160a01b037f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde1690633883e119906112fb908490600090600401614ea9565b602060405180830381865afa158015611318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133c9190614ec6565b94506000808061134c8589612b22565b9194509250905061137d837f00000000000000000000000000000000000000000000000000000000000000126125c5565b98506113a9827f00000000000000000000000000000000000000000000000000000000000000126125c5565b96506113d5817f00000000000000000000000000000000000000000000000000000000000000126125c5565b9550886000036113f857604051634f3f1ff560e11b815260040160405180910390fd5b611401856125ee565b505050505060006114317f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde612232565b9050600061145e7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2612232565b6040516307329bcd60e01b815260048101879052602481018d9052600060448201819052606482018190526001600160a01b038c81166084840152929350917f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde16906307329bcd9060a4016020604051808303816000875af11580156114e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150c9190614ec6565b60405163b27459ef60e01b81523360048201529091507f00000000000000000000000017354e8e7518599c7f6b7095a6706766e4e4dc616001600160a01b03169063b27459ef90602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190614edf565b6115b3576040516237368760e61b815260040160405180910390fd5b3363fa483e726115c2896127a9565b6115cb84612722565b8c8c6040518563ffffffff1660e01b81526004016115ec9493929190614f01565b600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b50505050868261162a9190614f59565b6116537f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2612232565b101561167257604051633e43182560e01b815260040160405180910390fd5b61167c8684614e5d565b6116a57f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde612232565b10156116c457604051630dbfca4560e11b815260040160405180910390fd5b6001600160a01b038a16337ff54b934b77620daa031e904076c3128079bcb07ca7a81f4235c504dc9c82eab46116f98a6127a9565b8f61170386612722565b60408051938452602084019290925290820152606081018990526080810188905260a00160405180910390a35050505050506110116001600055565b60006117496121d9565b427f0000000000000000000000000000000000000000000000000000000067724355116117895760405163398b36db60e01b815260040160405180910390fd5b600c546001600160801b03600160801b82048116911660006117ca7f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde612232565b905060006117f77f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2612232565b9050600080600061180b87878c8f8f612b68565b9194509250905061182461181f8389614f59565b612eb6565b600c80546001600160801b03928316600160801b02921691909117905561184e61181f8288614f59565b600c80546fffffffffffffffffffffffffffffffff19166001600160801b039290921691909117905560405163b27459ef60e01b81523360048201527f00000000000000000000000017354e8e7518599c7f6b7095a6706766e4e4dc616001600160a01b03169063b27459ef90602401602060405180830381865afa1580156118db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ff9190614edf565b61191b576040516237368760e61b815260040160405180910390fd5b604051639f382e9b60e01b81523390639f382e9b9061194290859085908e90600401614f88565b600060405180830381600087803b15801561195c57600080fd5b505af1158015611970573d6000803e3d6000fd5b5050505080856119809190614f59565b6119a97f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde612232565b10156119c85760405163bf753d0160e01b815260040160405180910390fd5b6119d28285614f59565b6119fb7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2612232565b1015611a1a57604051633e43182560e01b815260040160405180910390fd5b509095505050505050611a2d6001600055565b949350505050565b6001600160a01b03811660009081526008602052604081205461071f565b600060608082808083611a877f4e617069657220506f6f6c204c5020546f6b656e0000000000000000000000146006612f1f565b611ab27f31000000000000000000000000000000000000000000000000000000000000016007612f1f565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606005805461068890614e13565b3360008181526002602090815260408083206001600160a01b038716845290915281205490919083811015611b755760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610a8f82868684036120b5565b60003361071981858561284c565b611b986149a9565b50604080516060810182526001600160a01b037f000000000000000000000000dafff5445581906aec91f4b26d7f15351dd2964b811682527f0000000000000000000000006fd9581e71786a4fe3f533b3c64c896c6c186231811660208301527f00000000000000000000000079a5856906bdbf4e35e108e5f396b6b117204857169181019190915290565b336001600160a01b03167f00000000000000000000000017354e8e7518599c7f6b7095a6706766e4e4dc616001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb09190614fa7565b6001600160a01b031614611cd757604051630bcaf99960e21b815260040160405180910390fd5b816c1b1b91995954985d19549bdbdd609a1b03611d3b5766ad566553da1bb7811115611d1657604051633efe7b6f60e01b815260040160405180910390fd5b600a805469ffffffffffffffffffff191669ffffffffffffffffffff83161790555050565b817f70726f746f636f6c46656550657263656e74000000000000000000000000000003611da7576064811115611d8457604051630329b03560e11b815260040160405180910390fd5b600a80546aff000000000000000000001916600160501b60ff8416021790555050565b604051636d4eea9360e11b815260040160405180910390fd5b83421115611e105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401611b6c565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888611e3f8c612fca565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000611e9a82612ff2565b90506000611eaa8287878761301f565b9050896001600160a01b0316816001600160a01b031614611f0d5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401611b6c565b611f188a8a8a6120b5565b50505050505050505050565b600080611f2f6121d9565b30600090815260016020526040902054600c546001600160801b03600160801b820481169116611f60828285613047565b909550935084158015611f71575083155b15611f8f576040516354353b2760e01b815260040160405180910390fd5b611f9c61181f8684614e5d565b600c80546001600160801b03928316600160801b029216919091179055611fc661181f8583614e5d565b600c80546fffffffffffffffffffffffffffffffff19166001600160801b03929092169190911790556120237f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031687876122fa565b6120576001600160a01b037f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde1687866122fa565b60408051848152602081018790529081018590526001600160a01b038716907f743033787f4738ff4d6a7225ce2bd0977ee5f86b91a902a58f5e4d0b297b46449060600160405180910390a25050506120b06001600055565b915091565b6001600160a01b0383166121175760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611b6c565b6001600160a01b0382166121785760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611b6c565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60026000540361222b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611b6c565b6002600055565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b1790529051600091829182916001600160a01b038616916122899190614fc4565b600060405180830381855afa9150503d80600081146122c4576040519150601f19603f3d011682016040523d82523d6000602084013e6122c9565b606091505b50915091508180156122dd57506020815110155b6122e657600080fd5b80806020019051810190611a2d9190614ec6565b6040516001600160a01b03831660248201526044810182905261237590849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526130b9565b505050565b6123c260405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60007f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde6001600160a01b031663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015612422573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124469190614ec6565b604080516101008101909152600c54919250908190670de0b6b3a764000090849061247c906003906001600160801b0316614fe0565b6124869190614fe0565b612490919061500d565b8152600c546020909101906124d590600160801b90046001600160801b03167f000000000000000000000000000000000000000000000000000000000000001261318e565b815260208101929092527f000000000000000000000000000000000000000000000004d2c3d7905734ee0060408301527f00000000000000000000000000000000000000000000000000000000677243556060830152600a5469ffffffffffffffffffff81166080840152600160501b900460ff1660a0830152600b5460c090920191909152919050565b6000806000806000806125948861258f61258a8a60038d604001516125859190614fe0565b6131b0565b6127a9565b6131c5565b9250925092506125a38361322a565b95506125ae8261322a565b94506125b98161322a565b93505050509250925092565b60006125d2826012615021565b6125dd90600a61511e565b6125e7908461500d565b9392505050565b60e0810151600b5560408101516126299061260a906003614fe0565b825161261f90670de0b6b3a764000090614fe0565b61181f919061500d565b600c80546fffffffffffffffffffffffffffffffff19166001600160801b039290921691909117905560208101516126859061181f907f00000000000000000000000000000000000000000000000000000000000000126125c5565b600c80546001600160801b03928316600160801b02921691909117905560e08101516040517f03209b52f068a7fc82f5defd3aff047085d3503077b90e6b018b83a90c140856916126d99190815260200190565b60405180910390a150565b6040516001600160a01b038085166024830152831660448201526064810182905261271c9085906323b872dd60e01b90608401612326565b50505050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156127a55760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401611b6c565b5090565b60006127b482612722565b61071f9060001961512d565b6001600160a01b03838116600090815260026020908152604080832093861683529290522054600019811461271c578181101561283f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611b6c565b61271c84848484036120b5565b6001600160a01b0383166128b05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611b6c565b6001600160a01b0382166129125760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611b6c565b6001600160a01b0383166000908152600160205260409020548181101561298a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611b6c565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906129ea9086815260200190565b60405180910390a361271c565b6000306001600160a01b037f0000000000000000000000005a2d321ed5c525e52a3b8d295c6d097a3c78b82116148015612a5057507f000000000000000000000000000000000000000000000000000000000000000146145b15612a7a57507f98328885f9eb90c6badc11d9f750b5b0a0749133164ef68c3b7d075e4fcf2ce390565b610aea604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f7aac0d2e56122277a4fd2423d07dc97e1dc845ee88115e7c227f86e3923ada2a918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080600080600080612b518861258f612b4c8a60038d60400151612b479190614fe0565b61327c565b612722565b9250925092506125a3612b6384613291565b61322a565b600080600080612b7760035490565b905080600003612db4576103e8612bc186612bb2897f000000000000000000000000000000000000000000000000000000000000001261318e565b612bbc9190614fe0565b61329f565b612bcb9190614e5d565b935085925084915060007f000000000000000000000000f7e009b8111c09a906d1d84938745b9edeedfdde6001600160a01b031663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c579190614ec6565b9050612c6660016103e8613387565b612d76604051806101000160405280670de0b6b3a764000084600388612c8c9190614fe0565b612c969190614fe0565b612ca0919061500d565b8152602001612ccf877f000000000000000000000000000000000000000000000000000000000000001261318e565b8152602081018490527f000000000000000000000000000000000000000000000004d2c3d7905734ee0060408201527f00000000000000000000000000000000000000000000000000000000677243556060820152600a5469ffffffffffffffffffff81166080830152600160501b900460ff1660a0820152600060c0909101527f0000000000000000000000000000000000000000000000000e3872be3bd5ae00613448565b600b8190556040519081527f03209b52f068a7fc82f5defd3aff047085d3503077b90e6b018b83a90c1408569060200160405180910390a150612e33565b600088612dc18388614fe0565b612dcb919061500d565b905060008a612dda848a614fe0565b612de4919061500d565b905080821015612e125781955086935082868c612e019190614fe0565b612e0b919061500d565b9450612e30565b94508693508482612e23828c614fe0565b612e2d919061500d565b93505b50505b83600003612e54576040516354353b2760e01b815260040160405180910390fd5b612e5e8785613387565b60408051858152602081018590529081018390526001600160a01b038816907fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb9060600160405180910390a250955095509592505050565b60006001600160801b038211156127a55760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b6064820152608401611b6c565b606060ff8314612f3957612f3283613480565b905061071f565b818054612f4590614e13565b80601f0160208091040260200160405190810160405280929190818152602001828054612f7190614e13565b8015612fbe5780601f10612f9357610100808354040283529160200191612fbe565b820191906000526020600020905b815481529060010190602001808311612fa157829003601f168201915b5050505050905061071f565b6001600160a01b03811660009081526008602052604090208054600181018255905b50919050565b600061071f612fff6129f7565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000613030878787876134bf565b9150915061303d81613583565b5095945050505050565b6000808260000361306b57604051634f3f1ff560e11b815260040160405180910390fd5b600061307660035490565b9050806130838786614fe0565b61308d919061500d565b92508061309a8686614fe0565b6130a4919061500d565b91506130b030856136d0565b50935093915050565b600061310e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166138049092919063ffffffff16565b905080516000148061312f57508080602001905181019061312f9190614edf565b6123755760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611b6c565b600061319b826012615021565b6131a690600a61511e565b6125e79084614fe0565b60006125e78383670de0b6b3a7640000613813565b6000806000836131d88660000151612722565b136131f657604051634d7393f160e11b815260040160405180910390fd5b600061320186613831565b905061320e8682876138ab565b9195509350915061322286828787866139dc565b509250925092565b6000808212156127a55760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401611b6c565b60006125e78383670de0b6b3a7640000613a82565b600061071f8260001961512d565b6000816000036132b157506000919050565b600060016132be84613aa8565b901c6001901b905060018184816132d7576132d7614ff7565b048201901c905060018184816132ef576132ef614ff7565b048201901c9050600181848161330757613307614ff7565b048201901c9050600181848161331f5761331f614ff7565b048201901c9050600181848161333757613337614ff7565b048201901c9050600181848161334f5761334f614ff7565b048201901c9050600181848161336757613367614ff7565b048201901c90506125e78182858161338157613381614ff7565b04613b3c565b6001600160a01b0382166133dd5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611b6c565b80600360008282546133ef9190614f59565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60008042846080015161345b9190614e5d565b905060006134698583613b52565b905061101185600001518660200151838786613baa565b6060600061348d83613c03565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156134f6575060009050600361357a565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561354a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166135735760006001925092505061357a565b9150600090505b94509492505050565b60008160048111156135975761359761515d565b0361359f5750565b60018160048111156135b3576135b361515d565b036136005760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611b6c565b60028160048111156136145761361461515d565b036136615760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611b6c565b60038160048111156136755761367561515d565b036136cd5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611b6c565b50565b6001600160a01b0382166137305760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401611b6c565b6001600160a01b038216600090815260016020526040902054818110156137a45760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401611b6c565b6001600160a01b03831660008181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6060611a2d8484600085613c2b565b600082600019048411830215820261382a57600080fd5b5091020490565b61385560405180606001604052806000815260200160008152602001600081525090565b60004283608001516138679190614e5d565b90506138738382613b52565b808352835160e0850151602086015161388c9385613d06565b602083015260a08301516138a09082613d70565b604083015250919050565b6000806000806138d1612b4c8860000151896020015189600001518a602001518a613da7565b905060006138e76138e28784613e63565b613291565b905060008087131561396457600061390c896040015185613e6390919063ffffffff16565b9050670de0b6b3a764000081121561393a57604051631586184160e31b815260048101829052602401611b6c565b61395c8960400151670de0b6b3a76400006139559190615173565b8490613e78565b915050613996565b60408801516139939061397f81670de0b6b3a7640000615173565b613989908561512d565b6138e2919061519a565b90505b60006139a28284615173565b9050600060646139b58c60c00151612722565b6139bf908561512d565b6139c9919061519a565b919b929a50909850909650505050505050565b6139f7836139ed8760000151612722565b612b639190615173565b8552613a1c612b63613a0983856151c8565b613a168860200151612722565b90613e8d565b60208601526080850151600090613a34904290614e5d565b9050613a53866000015187602001518760000151886020015185613baa565b60e08701819052600003613a7a57604051634800fe7f60e01b815260040160405180910390fd5b505050505050565b6000826000190484118302158202613a9957600080fd5b50910281810615159190040190565b600080608083901c15613abd57608092831c92015b604083901c15613acf57604092831c92015b602083901c15613ae157602092831c92015b601083901c15613af357601092831c92015b600883901c15613b0557600892831c92015b600483901c15613b1757600492831c92015b600283901c15613b2957600292831c92015b600183901c1561071f5760010192915050565b6000818310613b4b57816125e7565b5090919050565b60008082613b656201518061016d614fe0565b8560600151613b749190614fe0565b613b7e919061500d565b905080600003613ba15760405163117aed9560e21b815260040160405180910390fd5b611a2d81612722565b600080613bbe612b4c888888886000613da7565b90506000613bd1613bce83613ed4565b90565b905083613be36201518061016d614fe0565b613bed9083614fe0565b613bf7919061500d565b98975050505050505050565b600060ff8216601f81111561071f57604051632cd44ac360e21b815260040160405180910390fd5b606082471015613c8c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611b6c565b600080866001600160a01b03168587604051613ca89190614fc4565b60006040518083038185875af1925050503d8060008114613ce5576040519150601f19603f3d011682016040523d82523d6000602084013e613cea565b606091505b5091509150613cfb87838387613f0b565b979650505050505050565b600080613d138684613d70565b9050670de0b6b3a7640000811215613d2a57600080fd5b6000613d40613d39878a614f59565b8990613f84565b90506000613d4d82613f99565b9050613d598187613e63565b613d639084615173565b9998505050505050505050565b600080613d826201518061016d614fe0565b613d8c8486614fe0565b613d96919061500d565b9050611a2d612b4c613bce83613ff2565b600080613db7836139ed89612722565b90506000613dcf613dc8888a614f59565b8390613f84565b9050670d529ae9e8600000811115613dfa57604051635677eea360e01b815260040160405180910390fd5b6000613e0582613f99565b9050600086613e14838a613e63565b613e1e91906151c8565b9050670de0b6b3a7640000811215613e4c57604051631586184160e31b815260048101829052602401611b6c565b613e558161322a565b9a9950505050505050505050565b60006125e783670de0b6b3a764000084614040565b60006125e78383670de0b6b3a7640000614040565b600081831215613eca5760405162461bcd60e51b81526020600482015260086024820152676e6567617469766560c01b6044820152606401611b6c565b6125e78284615173565b600061071f6714057b7ef767814f670de0b6b3a7640000613ef7613bce86614068565b613f01919061512d565b613bce919061519a565b60608315613f7a578251600003613f73576001600160a01b0385163b613f735760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611b6c565b5081611a2d565b611a2d83836141ce565b60006125e783670de0b6b3a764000084613813565b6000670de0b6b3a76400008203613fc357604051631b65cfed60e31b815260040160405180910390fd5b6000613fe4612b4c613fdd85670de0b6b3a7640000614e5d565b8590613f84565b90506125e7613bce82613ed4565b600081680736ea4425c11ac63081111561402257604051630d7b1d6560e11b815260048101849052602401611b6c565b6714057b7ef767814f8102611a2d670de0b6b3a764000082046141f8565b60008061404d848661512d565b905082818161405e5761405e614ff7565b0595945050505050565b60008181811361408e5760405163059b101b60e01b815260048101849052602401611b6c565b6000670de0b6b3a764000082126140a7575060016140cd565b50600019816ec097ce7bc90715b34b9f1000000000816140c9576140c9614ff7565b0591505b6000614150670de0b6b3a7640000840560016001600160801b03821160071b91821c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211871b91821c969096119490961792909217171791909117919091171790565b9050670de0b6b3a7640000810283821d670de0b6b3a763ffff19810161417d575091909102949350505050565b671bc16d674ec800006706f05b59d3b200005b60008113156141c357670de0b6b3a76400008380020592508183126141bb579283019260019290921d915b60011d614190565b509184029182613bf7565b8151156141de5781518083602001fd5b8060405162461bcd60e51b8152600401611b6c9190614a17565b600081680a688906bd8affffff8111156142285760405163b3b6ba1f60e01b815260048101849052602401611b6c565b6000614240670de0b6b3a7640000604084901b61500d565b9050611a2d613bce82600160bf1b67ff000000000000008216156143565767800000000000000082161561427d5768016a09e667f3bcc9090260401c5b67400000000000000082161561429c576801306fe0a31b7152df0260401c5b6720000000000000008216156142bb576801172b83c7d517adce0260401c5b6710000000000000008216156142da5768010b5586cf9890f62a0260401c5b6708000000000000008216156142f9576801059b0d31585743ae0260401c5b67040000000000000082161561431857680102c9a3e778060ee70260401c5b6702000000000000008216156143375768010163da9fb33356d80260401c5b67010000000000000082161561435657680100b1afa5abcbed610260401c5b66ff0000000000008216156144555766800000000000008216156143835768010058c86da1c09ea20260401c5b66400000000000008216156143a1576801002c605e2e8cec500260401c5b66200000000000008216156143bf57680100162f3904051fa10260401c5b66100000000000008216156143dd576801000b175effdc76ba0260401c5b66080000000000008216156143fb57680100058ba01fb9f96d0260401c5b66040000000000008216156144195768010002c5cc37da94920260401c5b6602000000000000821615614437576801000162e525ee05470260401c5b66010000000000008216156144555768010000b17255775c040260401c5b65ff000000000082161561454b5765800000000000821615614480576801000058b91b5bc9ae0260401c5b6540000000000082161561449d57680100002c5c89d5ec6d0260401c5b652000000000008216156144ba5768010000162e43f4f8310260401c5b651000000000008216156144d757680100000b1721bcfc9a0260401c5b650800000000008216156144f45768010000058b90cf1e6e0260401c5b65040000000000821615614511576801000002c5c863b73f0260401c5b6502000000000082161561452e57680100000162e430e5a20260401c5b6501000000000082161561454b576801000000b1721835510260401c5b64ff000000008216156146385764800000000082161561457457680100000058b90c0b490260401c5b6440000000008216156145905768010000002c5c8601cc0260401c5b6420000000008216156145ac576801000000162e42fff00260401c5b6410000000008216156145c85768010000000b17217fbb0260401c5b6408000000008216156145e4576801000000058b90bfce0260401c5b64040000000082161561460057680100000002c5c85fe30260401c5b64020000000082161561461c5768010000000162e42ff10260401c5b64010000000082161561463857680100000000b17217f80260401c5b63ff00000082161561471c57638000000082161561465f5768010000000058b90bfc0260401c5b634000000082161561467a576801000000002c5c85fe0260401c5b632000000082161561469557680100000000162e42ff0260401c5b63100000008216156146b0576801000000000b17217f0260401c5b63080000008216156146cb57680100000000058b90c00260401c5b63040000008216156146e65768010000000002c5c8600260401c5b6302000000821615614701576801000000000162e4300260401c5b630100000082161561471c5768010000000000b172180260401c5b62ff00008216156147f75762800000821615614741576801000000000058b90c0260401c5b6240000082161561475b57680100000000002c5c860260401c5b622000008216156147755768010000000000162e430260401c5b6210000082161561478f57680100000000000b17210260401c5b620800008216156147a95768010000000000058b910260401c5b620400008216156147c3576801000000000002c5c80260401c5b620200008216156147dd57680100000000000162e40260401c5b620100008216156147f7576801000000000000b1720260401c5b61ff008216156148c95761800082161561481a57680100000000000058b90260401c5b6140008216156148335768010000000000002c5d0260401c5b61200082161561484c576801000000000000162e0260401c5b6110008216156148655768010000000000000b170260401c5b61080082161561487e576801000000000000058c0260401c5b61040082161561489757680100000000000002c60260401c5b6102008216156148b057680100000000000001630260401c5b6101008216156148c957680100000000000000b10260401c5b60ff8216156149925760808216156148ea57680100000000000000590260401c5b6040821615614902576801000000000000002c0260401c5b602082161561491a57680100000000000000160260401c5b6010821615614932576801000000000000000b0260401c5b600882161561494a57680100000000000000060260401c5b600482161561496257680100000000000000030260401c5b600282161561497a57680100000000000000010260401c5b600182161561499257680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b60405180606001604052806003906020820280368337509192915050565b60005b838110156149e25781810151838201526020016149ca565b50506000910152565b60008151808452614a038160208601602086016149c7565b601f01601f19169290920160200192915050565b6020815260006125e760208301846149eb565b6001600160a01b03811681146136cd57600080fd5b60008060408385031215614a5257600080fd5b8235614a5d81614a2a565b946020939093013593505050565b60008060408385031215614a7e57600080fd5b823591506020830135614a9081614a2a565b809150509250929050565b600080600060608486031215614ab057600080fd5b8335614abb81614a2a565b92506020840135614acb81614a2a565b929592945050506040919091013590565b600080600080600060808688031215614af457600080fd5b85359450602086013593506040860135614b0d81614a2a565b9250606086013567ffffffffffffffff80821115614b2a57600080fd5b818801915088601f830112614b3e57600080fd5b813581811115614b4d57600080fd5b896020828501011115614b5f57600080fd5b9699959850939650602001949392505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215614b9e57600080fd5b84359350602085013592506040850135614bb781614a2a565b9150606085013567ffffffffffffffff80821115614bd457600080fd5b818701915087601f830112614be857600080fd5b813581811115614bfa57614bfa614b72565b604051601f8201601f19908116603f01168101908382118183101715614c2257614c22614b72565b816040528281528a6020848701011115614c3b57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600060208284031215614c7157600080fd5b81356125e781614a2a565b60ff60f81b881681526000602060e081840152614c9c60e084018a6149eb565b8381036040850152614cae818a6149eb565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015614d0057835183529284019291840191600101614ce4565b50909c9b505050505050505050505050565b60608101818360005b6003811015614d435781516001600160a01b0316835260209283019290910190600101614d1b565b50505092915050565b60008060408385031215614d5f57600080fd5b50508035926020909101359150565b600080600080600080600060e0888a031215614d8957600080fd5b8735614d9481614a2a565b96506020880135614da481614a2a565b95506040880135945060608801359350608088013560ff81168114614dc857600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215614df857600080fd5b8235614e0381614a2a565b91506020830135614a9081614a2a565b600181811c90821680614e2757607f821691505b602082108103612fec57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561071f5761071f614e47565b634e487b7160e01b600052603260045260246000fd5b8060005b600381101561271c578151845260209384019390910190600101614e8a565b60808101614eb78285614e86565b82151560608301529392505050565b600060208284031215614ed857600080fd5b5051919050565b600060208284031215614ef157600080fd5b815180151581146125e757600080fd5b84815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b60808101614f4c8285614e86565b8260608301529392505050565b8082018082111561071f5761071f614e47565b6000600160ff1b8201614f8157614f81614e47565b5060000390565b83815282602082015260606040820152600061101160608301846149eb565b600060208284031215614fb957600080fd5b81516125e781614a2a565b60008251614fd68184602087016149c7565b9190910192915050565b808202811582820484141761071f5761071f614e47565b634e487b7160e01b600052601260045260246000fd5b60008261501c5761501c614ff7565b500490565b60ff828116828216039081111561071f5761071f614e47565b600181815b8085111561507557816000190482111561505b5761505b614e47565b8085161561506857918102915b93841c939080029061503f565b509250929050565b60008261508c5750600161071f565b816150995750600061071f565b81600181146150af57600281146150b9576150d5565b600191505061071f565b60ff8411156150ca576150ca614e47565b50506001821b61071f565b5060208310610133831016604e8410600b84101617156150f8575081810a61071f565b615102838361503a565b806000190482111561511657615116614e47565b029392505050565b60006125e760ff84168361507d565b80820260008212600160ff1b8414161561514957615149614e47565b818105831482151761071f5761071f614e47565b634e487b7160e01b600052602160045260246000fd5b818103600083128015838313168383128216171561519357615193614e47565b5092915050565b6000826151a9576151a9614ff7565b600160ff1b8214600019841416156151c3576151c3614e47565b500590565b80820182811260008312801582168215821617156151e8576151e8614e47565b50509291505056fea164736f6c6343000813000a
0x60146102c08181527f4e617069657220506f6f6c204c5020546f6b656e0000000000000000000000006102e08190526001610300818152603160f81b61032052610340948552610360929092526103c0604052600e6103809081526d13985c1a595c941bdbdb0813141560921b6103a052600091909155919283926004620000888382620005f3565b506005620000978282620005f3565b50620000a991508390506006620004c9565b61012052620000ba816007620004c9565b61014052815160208084019190912060e052815190820120610100524660a0526200014860e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c05250336101608190526040805163274dbadb60e11b8152905160009291634e9b75b6916004808301926101409291908290030181865afa15801562000199573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001bf9190620007d9565b602080820180516060810151600a805492850151610260528351516102805292516040808201516001600160501b03166001600160501b031960ff9094166a010000000000000000000002939093166001600160581b031990941693909317919091179092556080909101516001600160a01b039081166102a0528351518082166101805284518401519182166101a0819052835163313ce56760e01b8152935195965090949193909263313ce56792600480830193928290030181865afa15801562000290573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b69190620008b0565b60ff166101c05282516040908101518051602080830151928401516001600160a01b038084166101e08190528186166102005290821661022052855163204f83f960e01b8152955193959193909263204f83f992600480820193918290030181865afa1580156200032b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003519190620008d5565b6102405260405163095ea7b360e01b81526001600160a01b038681166004830152600019602483015284169063095ea7b3906044016020604051808303816000875af1158015620003a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cc9190620008ef565b5060405163095ea7b360e01b81526001600160a01b038681166004830152600019602483015283169063095ea7b3906044016020604051808303816000875af11580156200041e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004449190620008ef565b5060405163095ea7b360e01b81526001600160a01b038681166004830152600019602483015282169063095ea7b3906044016020604051808303816000875af115801562000496573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004bc9190620008ef565b5050505050505062000988565b6000602083511015620004e957620004e18362000502565b9050620004fc565b81620004f68482620005f3565b5060ff90505b92915050565b600080829050601f8151111562000539578260405163305a27a960e01b815260040162000530919062000913565b60405180910390fd5b8051620005468262000963565b179392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200057957607f821691505b6020821081036200059a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005ee57600081815260208120601f850160051c81016020861015620005c95750805b601f850160051c820191505b81811015620005ea57828155600101620005d5565b5050505b505050565b81516001600160401b038111156200060f576200060f6200054e565b620006278162000620845462000564565b84620005a0565b602080601f8311600181146200065f5760008415620006465750858301515b600019600386901b1c1916600185901b178555620005ea565b600085815260208120601f198616915b8281101562000690578886015182559484019460019091019084016200066f565b5085821015620006af5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604080519081016001600160401b0381118282101715620006e457620006e46200054e565b60405290565b604051606081016001600160401b0381118282101715620006e457620006e46200054e565b80516001600160a01b03811681146200072757600080fd5b919050565b805160ff811681146200072757600080fd5b600060a082840312156200075157600080fd5b60405160a081016001600160401b03811182821017156200077657620007766200054e565b6040908152835182526020808501519083015283015190915081906001600160501b0381168114620007a757600080fd5b6040820152620007ba606084016200072c565b6060820152620007cd608084016200070f565b60808201525092915050565b6000818303610140811215620007ee57600080fd5b620007f8620006bf565b60a08212156200080757600080fd5b62000811620006ea565b91506200081e846200070f565b825260206200082f8186016200070f565b8184015285605f8601126200084357600080fd5b6200084d620006ea565b8060a08701888111156200086057600080fd5b604088015b81811015620008875762000879816200070f565b845292840192840162000865565b508160408701528585526200089d89826200073e565b8486015250505050809250505092915050565b600060208284031215620008c357600080fd5b620008ce826200072c565b9392505050565b600060208284031215620008e857600080fd5b5051919050565b6000602082840312156200090257600080fd5b81518015158114620008ce57600080fd5b600060208083528351808285015260005b81811015620009425785810183015185820160400152820162000924565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200059a5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a0516151fd62000c0e600039600081816103a5015281816107e801526108420152600081816104fe0152612d5201526000818161057a015281816124e10152612cda0152600081816102830152818161088401528181610afc015281816110700152818161123f0152818161174c015281816125070152612d0001526000611bfa01526000611bd201526000611bad0152600081816108ea015281816109180152818161094601528181610c1601528181610c4201528181610c6e015281816110d601528181611104015281816111320152818161135901528181611385015281816113b1015281816124b10152818161266101528181612b8e0152612cab01526000818161042b015281816104800152818161078301528181610820015281816109d801528181610cf601528181610d2901528181610f530152818161118f0152818161143a0152818161162f015281816117d3015281816119d70152611ff40152600081816104500152818161052d0152818161074b015281816107c6015281816109a301528181610b8001528181610cc901528181610e7401528181610f01015281816111c4015281816112c30152818161140d0152818161149f01528181611681015281816117a60152818161198501528181612030015281816123c60152612bd70152600081816105b601528181610d65015281816115240152818161188c0152611c3001526000611a8c01526000611a6101526000612ad101526000612aa901526000612a0401526000612a2e01526000612a5801526151fd6000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806367e4ac2c11610125578063a9059cbb116100ad578063c70920bc1161007c578063c70920bc146105d8578063d2135273146105f2578063d505accf14610605578063d798f86e14610618578063dd62ed3e1461064057600080fd5b8063a9059cbb14610562578063af247da314610575578063b751a0471461059c578063c45a0155146105b157600080fd5b806384b0196e116100f457806384b0196e146104de57806391e7c015146104f957806395d89b4114610520578063a0171ef514610528578063a457c2d71461054f57600080fd5b806367e4ac2c1461041d5780636f307dc31461047b57806370a08231146104a25780637ecebe00146104cb57600080fd5b806335ec597f116101a85780634157bc21116101775780634157bc211461038457806343bf8ab31461039757806346904840146103a05780634b5992df146103df57806362c0e33a146103f257600080fd5b806335ec597f146103435780633644e51514610356578063395093511461035e5780633a19e2301461037157600080fd5b8063204f83f9116101ef578063204f83f91461027e5780632390154f146102a557806323b872dd146102b85780632778c334146102cb578063313ce5671461033457600080fd5b806306fdde0314610221578063095ea7b31461023f57806318160ddd146102625780631dd19cb414610274575b600080fd5b610229610679565b6040516102369190614a17565b60405180910390f35b61025261024d366004614a3f565b61070b565b6040519015158152602001610236565b6003545b604051908152602001610236565b61027c610725565b005b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6102666102b3366004614a6b565b610877565b6102526102c6366004614a9b565b610a76565b6102d3610a9a565b6040516102369190600061010082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015292915050565b60405160128152602001610236565b610266610351366004614adc565b610aef565b61026661101a565b61025261036c366004614a3f565b611024565b61026661037f366004614a6b565b611063565b610266610392366004614adc565b611232565b610266600b5481565b6103c77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610236565b6102666103ed366004614b88565b61173f565b600c54610405906001600160801b031681565b6040516001600160801b039091168152602001610236565b604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811682527f000000000000000000000000000000000000000000000000000000000000000016602082015201610236565b6103c77f000000000000000000000000000000000000000000000000000000000000000081565b6102666104b0366004614c5f565b6001600160a01b031660009081526001602052604090205490565b6102666104d9366004614c5f565b611a35565b6104e6611a53565b6040516102369796959493929190614c7c565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b610229611adc565b6103c77f000000000000000000000000000000000000000000000000000000000000000081565b61025261055d366004614a3f565b611aeb565b610252610570366004614a3f565b611b82565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6105a4611b90565b6040516102369190614d12565b6103c77f000000000000000000000000000000000000000000000000000000000000000081565b600c5461040590600160801b90046001600160801b031681565b61027c610600366004614d4c565b611c24565b61027c610613366004614d6e565b611dc0565b61062b610626366004614c5f565b611f24565b60408051928352602083019190915201610236565b61026661064e366004614de5565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b60606004805461068890614e13565b80601f01602080910402602001604051908101604052809291908181526020018280546106b490614e13565b80156107015780601f106106d657610100808354040283529160200191610701565b820191906000526020600020905b8154815290600101906020018083116106e457829003601f168201915b5050505050905090565b6000336107198185856120b5565b60019150505b92915050565b61072d6121d9565b600c546001600160801b03600160801b82048116911660008161076f7f0000000000000000000000000000000000000000000000000000000000000000612232565b6107799190614e5d565b90506000836107a77f0000000000000000000000000000000000000000000000000000000000000000612232565b6107b19190614e5d565b9050811561080d5761080d6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000846122fa565b8015610867576108676001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000836122fa565b505050506108756001600055565b565b60006108816121d9565b427f0000000000000000000000000000000000000000000000000000000000000000116108c15760405163398b36db60e01b815260040160405180910390fd5b60006108cb61237a565b9050600080806108db8488612560565b91945092509050600061090e847f00000000000000000000000000000000000000000000000000000000000000006125c5565b9050600061093c847f00000000000000000000000000000000000000000000000000000000000000006125c5565b9050600061096a847f00000000000000000000000000000000000000000000000000000000000000006125c5565b90508260000361098d576040516354353b2760e01b815260040160405180910390fd5b610996876125ee565b6109cb6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308d6126e4565b6109ff6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168a856122fa565b6001600160a01b038916337f66d431b54da747831a1f20909a91a78bf991722fb6095c413fbf0918116dae15610a3486612722565b610a3d8e6127a9565b60408051928352602083019190915281018690526060810185905260800160405180910390a350909550505050505061071f6001600055565b600033610a848582856127c0565b610a8f85858561284c565b506001949350505050565b610ae260405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b610aea61237a565b905090565b6000610af96121d9565b427f000000000000000000000000000000000000000000000000000000000000000011610b395760405163398b36db60e01b815260040160405180910390fd5b610b416149a9565b600080600080610b4f61237a565b905089858c60038110610b6457610b64614e70565b6020020152604051633883e11960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633883e11990610bb8908890600190600401614ea9565b602060405180830381865afa158015610bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf99190614ec6565b935060008080610c098488612560565b91945092509050610c3a837f00000000000000000000000000000000000000000000000000000000000000006125c5565b9850610c66827f00000000000000000000000000000000000000000000000000000000000000006125c5565b9550610c92817f00000000000000000000000000000000000000000000000000000000000000006125c5565b945088600003610cb5576040516354353b2760e01b815260040160405180910390fd5b610cbe846125ee565b505050506000610ced7f0000000000000000000000000000000000000000000000000000000000000000612232565b90506000610d1a7f0000000000000000000000000000000000000000000000000000000000000000612232565b9050610d506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168b896122fa565b60405163b27459ef60e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b27459ef90602401602060405180830381865afa158015610db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd89190614edf565b610df4576040516237368760e61b815260040160405180910390fd5b3363fa483e72610e0389612722565b610e0c8e6127a9565b8c8c6040518563ffffffff1660e01b8152600401610e2d9493929190614f01565b600060405180830381600087803b158015610e4757600080fd5b505af1158015610e5b573d6000803e3d6000fd5b5050604051634515cef360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250634515cef39150610eae908990600090600401614f3e565b6020604051808303816000875af1158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190614ec6565b50610efc8583614f59565b610f257f0000000000000000000000000000000000000000000000000000000000000000612232565b1015610f445760405163bf753d0160e01b815260040160405180910390fd5b610f4e8782614e5d565b610f777f0000000000000000000000000000000000000000000000000000000000000000612232565b1015610f9657604051630dbfca4560e11b815260040160405180910390fd5b50506001600160a01b038816337ff54b934b77620daa031e904076c3128079bcb07ca7a81f4235c504dc9c82eab4610fcd88612722565b8d610fd78e6127a9565b60408051938452602084019290925290820152606081018690526080810185905260a00160405180910390a3505050506110116001600055565b95945050505050565b6000610aea6129f7565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909190610719908290869061105e908790614f59565b6120b5565b600061106d6121d9565b427f0000000000000000000000000000000000000000000000000000000000000000116110ad5760405163398b36db60e01b815260040160405180910390fd5b60006110b761237a565b9050600080806110c78488612b22565b9194509250905060006110fa847f00000000000000000000000000000000000000000000000000000000000000006125c5565b90506000611128847f00000000000000000000000000000000000000000000000000000000000000006125c5565b90506000611156847f00000000000000000000000000000000000000000000000000000000000000006125c5565b90508260000361117957604051634f3f1ff560e11b815260040160405180910390fd5b611182876125ee565b6111b76001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163330866126e4565b6111eb6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168a8c6122fa565b6001600160a01b038916337f66d431b54da747831a1f20909a91a78bf991722fb6095c413fbf0918116dae1561122086612722565b61122990614f6c565b610a3d8e612722565b600061123c6121d9565b427f00000000000000000000000000000000000000000000000000000000000000001161127c5760405163398b36db60e01b815260040160405180910390fd5b60008060008061128a61237a565b90506112946149a9565b89818c600381106112a7576112a7614e70565b6020020152604051633883e11960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633883e119906112fb908490600090600401614ea9565b602060405180830381865afa158015611318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133c9190614ec6565b94506000808061134c8589612b22565b9194509250905061137d837f00000000000000000000000000000000000000000000000000000000000000006125c5565b98506113a9827f00000000000000000000000000000000000000000000000000000000000000006125c5565b96506113d5817f00000000000000000000000000000000000000000000000000000000000000006125c5565b9550886000036113f857604051634f3f1ff560e11b815260040160405180910390fd5b611401856125ee565b505050505060006114317f0000000000000000000000000000000000000000000000000000000000000000612232565b9050600061145e7f0000000000000000000000000000000000000000000000000000000000000000612232565b6040516307329bcd60e01b815260048101879052602481018d9052600060448201819052606482018190526001600160a01b038c81166084840152929350917f000000000000000000000000000000000000000000000000000000000000000016906307329bcd9060a4016020604051808303816000875af11580156114e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150c9190614ec6565b60405163b27459ef60e01b81523360048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b27459ef90602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190614edf565b6115b3576040516237368760e61b815260040160405180910390fd5b3363fa483e726115c2896127a9565b6115cb84612722565b8c8c6040518563ffffffff1660e01b81526004016115ec9493929190614f01565b600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b50505050868261162a9190614f59565b6116537f0000000000000000000000000000000000000000000000000000000000000000612232565b101561167257604051633e43182560e01b815260040160405180910390fd5b61167c8684614e5d565b6116a57f0000000000000000000000000000000000000000000000000000000000000000612232565b10156116c457604051630dbfca4560e11b815260040160405180910390fd5b6001600160a01b038a16337ff54b934b77620daa031e904076c3128079bcb07ca7a81f4235c504dc9c82eab46116f98a6127a9565b8f61170386612722565b60408051938452602084019290925290820152606081018990526080810188905260a00160405180910390a35050505050506110116001600055565b60006117496121d9565b427f0000000000000000000000000000000000000000000000000000000000000000116117895760405163398b36db60e01b815260040160405180910390fd5b600c546001600160801b03600160801b82048116911660006117ca7f0000000000000000000000000000000000000000000000000000000000000000612232565b905060006117f77f0000000000000000000000000000000000000000000000000000000000000000612232565b9050600080600061180b87878c8f8f612b68565b9194509250905061182461181f8389614f59565b612eb6565b600c80546001600160801b03928316600160801b02921691909117905561184e61181f8288614f59565b600c80546fffffffffffffffffffffffffffffffff19166001600160801b039290921691909117905560405163b27459ef60e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b27459ef90602401602060405180830381865afa1580156118db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ff9190614edf565b61191b576040516237368760e61b815260040160405180910390fd5b604051639f382e9b60e01b81523390639f382e9b9061194290859085908e90600401614f88565b600060405180830381600087803b15801561195c57600080fd5b505af1158015611970573d6000803e3d6000fd5b5050505080856119809190614f59565b6119a97f0000000000000000000000000000000000000000000000000000000000000000612232565b10156119c85760405163bf753d0160e01b815260040160405180910390fd5b6119d28285614f59565b6119fb7f0000000000000000000000000000000000000000000000000000000000000000612232565b1015611a1a57604051633e43182560e01b815260040160405180910390fd5b509095505050505050611a2d6001600055565b949350505050565b6001600160a01b03811660009081526008602052604081205461071f565b600060608082808083611a877f00000000000000000000000000000000000000000000000000000000000000006006612f1f565b611ab27f00000000000000000000000000000000000000000000000000000000000000006007612f1f565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606005805461068890614e13565b3360008181526002602090815260408083206001600160a01b038716845290915281205490919083811015611b755760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610a8f82868684036120b5565b60003361071981858561284c565b611b986149a9565b50604080516060810182526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811682527f0000000000000000000000000000000000000000000000000000000000000000811660208301527f0000000000000000000000000000000000000000000000000000000000000000169181019190915290565b336001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb09190614fa7565b6001600160a01b031614611cd757604051630bcaf99960e21b815260040160405180910390fd5b816c1b1b91995954985d19549bdbdd609a1b03611d3b5766ad566553da1bb7811115611d1657604051633efe7b6f60e01b815260040160405180910390fd5b600a805469ffffffffffffffffffff191669ffffffffffffffffffff83161790555050565b817f70726f746f636f6c46656550657263656e74000000000000000000000000000003611da7576064811115611d8457604051630329b03560e11b815260040160405180910390fd5b600a80546aff000000000000000000001916600160501b60ff8416021790555050565b604051636d4eea9360e11b815260040160405180910390fd5b83421115611e105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401611b6c565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888611e3f8c612fca565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000611e9a82612ff2565b90506000611eaa8287878761301f565b9050896001600160a01b0316816001600160a01b031614611f0d5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401611b6c565b611f188a8a8a6120b5565b50505050505050505050565b600080611f2f6121d9565b30600090815260016020526040902054600c546001600160801b03600160801b820481169116611f60828285613047565b909550935084158015611f71575083155b15611f8f576040516354353b2760e01b815260040160405180910390fd5b611f9c61181f8684614e5d565b600c80546001600160801b03928316600160801b029216919091179055611fc661181f8583614e5d565b600c80546fffffffffffffffffffffffffffffffff19166001600160801b03929092169190911790556120237f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031687876122fa565b6120576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001687866122fa565b60408051848152602081018790529081018590526001600160a01b038716907f743033787f4738ff4d6a7225ce2bd0977ee5f86b91a902a58f5e4d0b297b46449060600160405180910390a25050506120b06001600055565b915091565b6001600160a01b0383166121175760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611b6c565b6001600160a01b0382166121785760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611b6c565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60026000540361222b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611b6c565b6002600055565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b1790529051600091829182916001600160a01b038616916122899190614fc4565b600060405180830381855afa9150503d80600081146122c4576040519150601f19603f3d011682016040523d82523d6000602084013e6122c9565b606091505b50915091508180156122dd57506020815110155b6122e657600080fd5b80806020019051810190611a2d9190614ec6565b6040516001600160a01b03831660248201526044810182905261237590849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526130b9565b505050565b6123c260405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015612422573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124469190614ec6565b604080516101008101909152600c54919250908190670de0b6b3a764000090849061247c906003906001600160801b0316614fe0565b6124869190614fe0565b612490919061500d565b8152600c546020909101906124d590600160801b90046001600160801b03167f000000000000000000000000000000000000000000000000000000000000000061318e565b815260208101929092527f000000000000000000000000000000000000000000000000000000000000000060408301527f00000000000000000000000000000000000000000000000000000000000000006060830152600a5469ffffffffffffffffffff81166080840152600160501b900460ff1660a0830152600b5460c090920191909152919050565b6000806000806000806125948861258f61258a8a60038d604001516125859190614fe0565b6131b0565b6127a9565b6131c5565b9250925092506125a38361322a565b95506125ae8261322a565b94506125b98161322a565b93505050509250925092565b60006125d2826012615021565b6125dd90600a61511e565b6125e7908461500d565b9392505050565b60e0810151600b5560408101516126299061260a906003614fe0565b825161261f90670de0b6b3a764000090614fe0565b61181f919061500d565b600c80546fffffffffffffffffffffffffffffffff19166001600160801b039290921691909117905560208101516126859061181f907f00000000000000000000000000000000000000000000000000000000000000006125c5565b600c80546001600160801b03928316600160801b02921691909117905560e08101516040517f03209b52f068a7fc82f5defd3aff047085d3503077b90e6b018b83a90c140856916126d99190815260200190565b60405180910390a150565b6040516001600160a01b038085166024830152831660448201526064810182905261271c9085906323b872dd60e01b90608401612326565b50505050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156127a55760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401611b6c565b5090565b60006127b482612722565b61071f9060001961512d565b6001600160a01b03838116600090815260026020908152604080832093861683529290522054600019811461271c578181101561283f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611b6c565b61271c84848484036120b5565b6001600160a01b0383166128b05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611b6c565b6001600160a01b0382166129125760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611b6c565b6001600160a01b0383166000908152600160205260409020548181101561298a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611b6c565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906129ea9086815260200190565b60405180910390a361271c565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015612a5057507f000000000000000000000000000000000000000000000000000000000000000046145b15612a7a57507f000000000000000000000000000000000000000000000000000000000000000090565b610aea604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080600080600080612b518861258f612b4c8a60038d60400151612b479190614fe0565b61327c565b612722565b9250925092506125a3612b6384613291565b61322a565b600080600080612b7760035490565b905080600003612db4576103e8612bc186612bb2897f000000000000000000000000000000000000000000000000000000000000000061318e565b612bbc9190614fe0565b61329f565b612bcb9190614e5d565b935085925084915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c579190614ec6565b9050612c6660016103e8613387565b612d76604051806101000160405280670de0b6b3a764000084600388612c8c9190614fe0565b612c969190614fe0565b612ca0919061500d565b8152602001612ccf877f000000000000000000000000000000000000000000000000000000000000000061318e565b8152602081018490527f000000000000000000000000000000000000000000000000000000000000000060408201527f00000000000000000000000000000000000000000000000000000000000000006060820152600a5469ffffffffffffffffffff81166080830152600160501b900460ff1660a0820152600060c0909101527f0000000000000000000000000000000000000000000000000000000000000000613448565b600b8190556040519081527f03209b52f068a7fc82f5defd3aff047085d3503077b90e6b018b83a90c1408569060200160405180910390a150612e33565b600088612dc18388614fe0565b612dcb919061500d565b905060008a612dda848a614fe0565b612de4919061500d565b905080821015612e125781955086935082868c612e019190614fe0565b612e0b919061500d565b9450612e30565b94508693508482612e23828c614fe0565b612e2d919061500d565b93505b50505b83600003612e54576040516354353b2760e01b815260040160405180910390fd5b612e5e8785613387565b60408051858152602081018590529081018390526001600160a01b038816907fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb9060600160405180910390a250955095509592505050565b60006001600160801b038211156127a55760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b6064820152608401611b6c565b606060ff8314612f3957612f3283613480565b905061071f565b818054612f4590614e13565b80601f0160208091040260200160405190810160405280929190818152602001828054612f7190614e13565b8015612fbe5780601f10612f9357610100808354040283529160200191612fbe565b820191906000526020600020905b815481529060010190602001808311612fa157829003601f168201915b5050505050905061071f565b6001600160a01b03811660009081526008602052604090208054600181018255905b50919050565b600061071f612fff6129f7565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000613030878787876134bf565b9150915061303d81613583565b5095945050505050565b6000808260000361306b57604051634f3f1ff560e11b815260040160405180910390fd5b600061307660035490565b9050806130838786614fe0565b61308d919061500d565b92508061309a8686614fe0565b6130a4919061500d565b91506130b030856136d0565b50935093915050565b600061310e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166138049092919063ffffffff16565b905080516000148061312f57508080602001905181019061312f9190614edf565b6123755760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611b6c565b600061319b826012615021565b6131a690600a61511e565b6125e79084614fe0565b60006125e78383670de0b6b3a7640000613813565b6000806000836131d88660000151612722565b136131f657604051634d7393f160e11b815260040160405180910390fd5b600061320186613831565b905061320e8682876138ab565b9195509350915061322286828787866139dc565b509250925092565b6000808212156127a55760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401611b6c565b60006125e78383670de0b6b3a7640000613a82565b600061071f8260001961512d565b6000816000036132b157506000919050565b600060016132be84613aa8565b901c6001901b905060018184816132d7576132d7614ff7565b048201901c905060018184816132ef576132ef614ff7565b048201901c9050600181848161330757613307614ff7565b048201901c9050600181848161331f5761331f614ff7565b048201901c9050600181848161333757613337614ff7565b048201901c9050600181848161334f5761334f614ff7565b048201901c9050600181848161336757613367614ff7565b048201901c90506125e78182858161338157613381614ff7565b04613b3c565b6001600160a01b0382166133dd5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611b6c565b80600360008282546133ef9190614f59565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60008042846080015161345b9190614e5d565b905060006134698583613b52565b905061101185600001518660200151838786613baa565b6060600061348d83613c03565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156134f6575060009050600361357a565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561354a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166135735760006001925092505061357a565b9150600090505b94509492505050565b60008160048111156135975761359761515d565b0361359f5750565b60018160048111156135b3576135b361515d565b036136005760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611b6c565b60028160048111156136145761361461515d565b036136615760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611b6c565b60038160048111156136755761367561515d565b036136cd5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611b6c565b50565b6001600160a01b0382166137305760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401611b6c565b6001600160a01b038216600090815260016020526040902054818110156137a45760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401611b6c565b6001600160a01b03831660008181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6060611a2d8484600085613c2b565b600082600019048411830215820261382a57600080fd5b5091020490565b61385560405180606001604052806000815260200160008152602001600081525090565b60004283608001516138679190614e5d565b90506138738382613b52565b808352835160e0850151602086015161388c9385613d06565b602083015260a08301516138a09082613d70565b604083015250919050565b6000806000806138d1612b4c8860000151896020015189600001518a602001518a613da7565b905060006138e76138e28784613e63565b613291565b905060008087131561396457600061390c896040015185613e6390919063ffffffff16565b9050670de0b6b3a764000081121561393a57604051631586184160e31b815260048101829052602401611b6c565b61395c8960400151670de0b6b3a76400006139559190615173565b8490613e78565b915050613996565b60408801516139939061397f81670de0b6b3a7640000615173565b613989908561512d565b6138e2919061519a565b90505b60006139a28284615173565b9050600060646139b58c60c00151612722565b6139bf908561512d565b6139c9919061519a565b919b929a50909850909650505050505050565b6139f7836139ed8760000151612722565b612b639190615173565b8552613a1c612b63613a0983856151c8565b613a168860200151612722565b90613e8d565b60208601526080850151600090613a34904290614e5d565b9050613a53866000015187602001518760000151886020015185613baa565b60e08701819052600003613a7a57604051634800fe7f60e01b815260040160405180910390fd5b505050505050565b6000826000190484118302158202613a9957600080fd5b50910281810615159190040190565b600080608083901c15613abd57608092831c92015b604083901c15613acf57604092831c92015b602083901c15613ae157602092831c92015b601083901c15613af357601092831c92015b600883901c15613b0557600892831c92015b600483901c15613b1757600492831c92015b600283901c15613b2957600292831c92015b600183901c1561071f5760010192915050565b6000818310613b4b57816125e7565b5090919050565b60008082613b656201518061016d614fe0565b8560600151613b749190614fe0565b613b7e919061500d565b905080600003613ba15760405163117aed9560e21b815260040160405180910390fd5b611a2d81612722565b600080613bbe612b4c888888886000613da7565b90506000613bd1613bce83613ed4565b90565b905083613be36201518061016d614fe0565b613bed9083614fe0565b613bf7919061500d565b98975050505050505050565b600060ff8216601f81111561071f57604051632cd44ac360e21b815260040160405180910390fd5b606082471015613c8c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611b6c565b600080866001600160a01b03168587604051613ca89190614fc4565b60006040518083038185875af1925050503d8060008114613ce5576040519150601f19603f3d011682016040523d82523d6000602084013e613cea565b606091505b5091509150613cfb87838387613f0b565b979650505050505050565b600080613d138684613d70565b9050670de0b6b3a7640000811215613d2a57600080fd5b6000613d40613d39878a614f59565b8990613f84565b90506000613d4d82613f99565b9050613d598187613e63565b613d639084615173565b9998505050505050505050565b600080613d826201518061016d614fe0565b613d8c8486614fe0565b613d96919061500d565b9050611a2d612b4c613bce83613ff2565b600080613db7836139ed89612722565b90506000613dcf613dc8888a614f59565b8390613f84565b9050670d529ae9e8600000811115613dfa57604051635677eea360e01b815260040160405180910390fd5b6000613e0582613f99565b9050600086613e14838a613e63565b613e1e91906151c8565b9050670de0b6b3a7640000811215613e4c57604051631586184160e31b815260048101829052602401611b6c565b613e558161322a565b9a9950505050505050505050565b60006125e783670de0b6b3a764000084614040565b60006125e78383670de0b6b3a7640000614040565b600081831215613eca5760405162461bcd60e51b81526020600482015260086024820152676e6567617469766560c01b6044820152606401611b6c565b6125e78284615173565b600061071f6714057b7ef767814f670de0b6b3a7640000613ef7613bce86614068565b613f01919061512d565b613bce919061519a565b60608315613f7a578251600003613f73576001600160a01b0385163b613f735760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611b6c565b5081611a2d565b611a2d83836141ce565b60006125e783670de0b6b3a764000084613813565b6000670de0b6b3a76400008203613fc357604051631b65cfed60e31b815260040160405180910390fd5b6000613fe4612b4c613fdd85670de0b6b3a7640000614e5d565b8590613f84565b90506125e7613bce82613ed4565b600081680736ea4425c11ac63081111561402257604051630d7b1d6560e11b815260048101849052602401611b6c565b6714057b7ef767814f8102611a2d670de0b6b3a764000082046141f8565b60008061404d848661512d565b905082818161405e5761405e614ff7565b0595945050505050565b60008181811361408e5760405163059b101b60e01b815260048101849052602401611b6c565b6000670de0b6b3a764000082126140a7575060016140cd565b50600019816ec097ce7bc90715b34b9f1000000000816140c9576140c9614ff7565b0591505b6000614150670de0b6b3a7640000840560016001600160801b03821160071b91821c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211871b91821c969096119490961792909217171791909117919091171790565b9050670de0b6b3a7640000810283821d670de0b6b3a763ffff19810161417d575091909102949350505050565b671bc16d674ec800006706f05b59d3b200005b60008113156141c357670de0b6b3a76400008380020592508183126141bb579283019260019290921d915b60011d614190565b509184029182613bf7565b8151156141de5781518083602001fd5b8060405162461bcd60e51b8152600401611b6c9190614a17565b600081680a688906bd8affffff8111156142285760405163b3b6ba1f60e01b815260048101849052602401611b6c565b6000614240670de0b6b3a7640000604084901b61500d565b9050611a2d613bce82600160bf1b67ff000000000000008216156143565767800000000000000082161561427d5768016a09e667f3bcc9090260401c5b67400000000000000082161561429c576801306fe0a31b7152df0260401c5b6720000000000000008216156142bb576801172b83c7d517adce0260401c5b6710000000000000008216156142da5768010b5586cf9890f62a0260401c5b6708000000000000008216156142f9576801059b0d31585743ae0260401c5b67040000000000000082161561431857680102c9a3e778060ee70260401c5b6702000000000000008216156143375768010163da9fb33356d80260401c5b67010000000000000082161561435657680100b1afa5abcbed610260401c5b66ff0000000000008216156144555766800000000000008216156143835768010058c86da1c09ea20260401c5b66400000000000008216156143a1576801002c605e2e8cec500260401c5b66200000000000008216156143bf57680100162f3904051fa10260401c5b66100000000000008216156143dd576801000b175effdc76ba0260401c5b66080000000000008216156143fb57680100058ba01fb9f96d0260401c5b66040000000000008216156144195768010002c5cc37da94920260401c5b6602000000000000821615614437576801000162e525ee05470260401c5b66010000000000008216156144555768010000b17255775c040260401c5b65ff000000000082161561454b5765800000000000821615614480576801000058b91b5bc9ae0260401c5b6540000000000082161561449d57680100002c5c89d5ec6d0260401c5b652000000000008216156144ba5768010000162e43f4f8310260401c5b651000000000008216156144d757680100000b1721bcfc9a0260401c5b650800000000008216156144f45768010000058b90cf1e6e0260401c5b65040000000000821615614511576801000002c5c863b73f0260401c5b6502000000000082161561452e57680100000162e430e5a20260401c5b6501000000000082161561454b576801000000b1721835510260401c5b64ff000000008216156146385764800000000082161561457457680100000058b90c0b490260401c5b6440000000008216156145905768010000002c5c8601cc0260401c5b6420000000008216156145ac576801000000162e42fff00260401c5b6410000000008216156145c85768010000000b17217fbb0260401c5b6408000000008216156145e4576801000000058b90bfce0260401c5b64040000000082161561460057680100000002c5c85fe30260401c5b64020000000082161561461c5768010000000162e42ff10260401c5b64010000000082161561463857680100000000b17217f80260401c5b63ff00000082161561471c57638000000082161561465f5768010000000058b90bfc0260401c5b634000000082161561467a576801000000002c5c85fe0260401c5b632000000082161561469557680100000000162e42ff0260401c5b63100000008216156146b0576801000000000b17217f0260401c5b63080000008216156146cb57680100000000058b90c00260401c5b63040000008216156146e65768010000000002c5c8600260401c5b6302000000821615614701576801000000000162e4300260401c5b630100000082161561471c5768010000000000b172180260401c5b62ff00008216156147f75762800000821615614741576801000000000058b90c0260401c5b6240000082161561475b57680100000000002c5c860260401c5b622000008216156147755768010000000000162e430260401c5b6210000082161561478f57680100000000000b17210260401c5b620800008216156147a95768010000000000058b910260401c5b620400008216156147c3576801000000000002c5c80260401c5b620200008216156147dd57680100000000000162e40260401c5b620100008216156147f7576801000000000000b1720260401c5b61ff008216156148c95761800082161561481a57680100000000000058b90260401c5b6140008216156148335768010000000000002c5d0260401c5b61200082161561484c576801000000000000162e0260401c5b6110008216156148655768010000000000000b170260401c5b61080082161561487e576801000000000000058c0260401c5b61040082161561489757680100000000000002c60260401c5b6102008216156148b057680100000000000001630260401c5b6101008216156148c957680100000000000000b10260401c5b60ff8216156149925760808216156148ea57680100000000000000590260401c5b6040821615614902576801000000000000002c0260401c5b602082161561491a57680100000000000000160260401c5b6010821615614932576801000000000000000b0260401c5b600882161561494a57680100000000000000060260401c5b600482161561496257680100000000000000030260401c5b600282161561497a57680100000000000000010260401c5b600182161561499257680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b60405180606001604052806003906020820280368337509192915050565b60005b838110156149e25781810151838201526020016149ca565b50506000910152565b60008151808452614a038160208601602086016149c7565b601f01601f19169290920160200192915050565b6020815260006125e760208301846149eb565b6001600160a01b03811681146136cd57600080fd5b60008060408385031215614a5257600080fd5b8235614a5d81614a2a565b946020939093013593505050565b60008060408385031215614a7e57600080fd5b823591506020830135614a9081614a2a565b809150509250929050565b600080600060608486031215614ab057600080fd5b8335614abb81614a2a565b92506020840135614acb81614a2a565b929592945050506040919091013590565b600080600080600060808688031215614af457600080fd5b85359450602086013593506040860135614b0d81614a2a565b9250606086013567ffffffffffffffff80821115614b2a57600080fd5b818801915088601f830112614b3e57600080fd5b813581811115614b4d57600080fd5b896020828501011115614b5f57600080fd5b9699959850939650602001949392505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215614b9e57600080fd5b84359350602085013592506040850135614bb781614a2a565b9150606085013567ffffffffffffffff80821115614bd457600080fd5b818701915087601f830112614be857600080fd5b813581811115614bfa57614bfa614b72565b604051601f8201601f19908116603f01168101908382118183101715614c2257614c22614b72565b816040528281528a6020848701011115614c3b57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600060208284031215614c7157600080fd5b81356125e781614a2a565b60ff60f81b881681526000602060e081840152614c9c60e084018a6149eb565b8381036040850152614cae818a6149eb565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015614d0057835183529284019291840191600101614ce4565b50909c9b505050505050505050505050565b60608101818360005b6003811015614d435781516001600160a01b0316835260209283019290910190600101614d1b565b50505092915050565b60008060408385031215614d5f57600080fd5b50508035926020909101359150565b600080600080600080600060e0888a031215614d8957600080fd5b8735614d9481614a2a565b96506020880135614da481614a2a565b95506040880135945060608801359350608088013560ff81168114614dc857600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215614df857600080fd5b8235614e0381614a2a565b91506020830135614a9081614a2a565b600181811c90821680614e2757607f821691505b602082108103612fec57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561071f5761071f614e47565b634e487b7160e01b600052603260045260246000fd5b8060005b600381101561271c578151845260209384019390910190600101614e8a565b60808101614eb78285614e86565b82151560608301529392505050565b600060208284031215614ed857600080fd5b5051919050565b600060208284031215614ef157600080fd5b815180151581146125e757600080fd5b84815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b60808101614f4c8285614e86565b8260608301529392505050565b8082018082111561071f5761071f614e47565b6000600160ff1b8201614f8157614f81614e47565b5060000390565b83815282602082015260606040820152600061101160608301846149eb565b600060208284031215614fb957600080fd5b81516125e781614a2a565b60008251614fd68184602087016149c7565b9190910192915050565b808202811582820484141761071f5761071f614e47565b634e487b7160e01b600052601260045260246000fd5b60008261501c5761501c614ff7565b500490565b60ff828116828216039081111561071f5761071f614e47565b600181815b8085111561507557816000190482111561505b5761505b614e47565b8085161561506857918102915b93841c939080029061503f565b509250929050565b60008261508c5750600161071f565b816150995750600061071f565b81600181146150af57600281146150b9576150d5565b600191505061071f565b60ff8411156150ca576150ca614e47565b50506001821b61071f565b5060208310610133831016604e8410600b84101617156150f8575081810a61071f565b615102838361503a565b806000190482111561511657615116614e47565b029392505050565b60006125e760ff84168361507d565b80820260008212600160ff1b8414161561514957615149614e47565b818105831482151761071f5761071f614e47565b634e487b7160e01b600052602160045260246000fd5b818103600083128015838313168383128216171561519357615193614e47565b5092915050565b6000826151a9576151a9614ff7565b600160ff1b8214600019841416156151c3576151c3614e47565b500590565b80820182811260008312801582168215821617156151e8576151e8614e47565b50509291505056fea164736f6c6343000813000a